目录
简介
npm(Node Package Manager)
Node.js的包管理工具,用于安装、管理和分享 JavaScript 代码包(libraries、frameworks、tools 等)。
- React、Vue、Angular 等框架的依赖管理。
- 开发工具如 Webpack、Babel、ESLint。
- 测试工具如 Jest、Mocha。
- CI/CD 工具如 Husky、lint-staged。CI/CD 工具(Continuous Integration/Continuous Deployment/Delivery 工具)用于实现软件开发的自动化构建、测试、部署流程,可以大幅提高开发效率、代码质量和交付速度。
它附带在 Node.js 安装包中。
从 https://www.npmjs.com/ 网站上搜索自己所需要的包
从 https://registry.npmjs.org/ 服务器上下载自己需要的包
npm -v
npm i package_name
#默认情况下,使安装包的时候,会自动安装最新版本的包。
#如果需要安装指定版本的包,可以在包名之后,通过 @ 符号指定具体的版本
npm i moment@2.22.2
npm i #一次性安装所有依赖包
npm uninstall package_name
运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到 package.json 的dependencies中。
初次装包完成后,在项目文件夹下多一个叫做 node_modules 的文件夹和 package-lock.json 的配置文件。 其中: node_modules 文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。 package-lock.json 配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。
注意:程序员不要手动修改 node_modules 或 package-lock.json 文件中的任何代码,npm 包管理工具会自动维护它们。
- npm包可以分成项目包、全局包
那些被安装到项目的 node_modules 目录中的包,都是项目包。
项目包又分为两类,分别是:开发依赖包(被记录到 devDependencies 节点中的包,只在开发期间会用到),核心依赖包(被记录到 dependencies 节点中的包,在开发期间和项目上线之后都会用到)
命令-g则安装为全局包 卸载也需要添加-g,只有工具性质的包,才有全局安装的必要性。
- 包管理配置文件
npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些配置信息。例如: 项目的名称、版本号、描述等 项目中都用到了哪些包 哪些包只在开发期间会用到 哪些包在开发和部署时都需要用到。从而方便剔除 node_modules 目录之后,在团队成员之间共享项目。 注意:今后在项目开发中,一定要把 node_modules 文件夹,添加到 .gitignore 忽略文件中。
npm init -y //快速创建package.json
项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。
- devDependencies 节点
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到 devDependencies 节点中。 与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到 dependencies 节点中。
npm i package_name -D #记录到devDependencies节点中
npm install package_name --save-dev
- 国内npm镜像服务器
镜像(Mirroring)是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。
npm config get registry #查看当前镜像源
npm config set registry=https://registry.npm.taobao.org/#淘宝源
npm config get registry #检查镜像源是否下载成功
- nrm
npm i nrm -g #全局安装
nrm ls #查看可用镜像源
nrm use taobao #切换为taobao镜像
- 规范的包结构
一个规范的包,它的组成结构,必须符合以下 3 点要求: 包必须以单独的目录而存在,包的顶级目录下要必须包含 package.json 这个包管理配置文件,package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口。
包的语义化版本规范
包的版本号是以“点分十进制”形式进行定义的,总共有三位数字,例如 2.24.0 其中每一位数字所代表的的含义如下:
第1位数字:大版本
第2位数字:功能版本
第3位数字:Bug修复版本
版本号提升的规则:只要前面的版本号增长了,则后面的版本号归零。
使用
- 安装
conda install nodejs
安装后会生成node_modules,package-lock.json
1、什么是 npm 脚本scripts?
npm 允许在package.json
文件里面,使用scripts
字段定义脚本命令。
注意添加keywords
"scripts": {
"build": "node build.js"
}
}
上面代码是package.json
文件的一个片段,里面的scripts
字段是一个对象。它的每一个属性,对应一段脚本。比如,build
命令对应的脚本是node build.js
。
命令行下使用npm run
命令,就可以执行这段脚本。每次版本更新时如果源码变了一定要执行这个代码,否则npm包代码不会更新。
$ npm run build
# 等同于执行
$ node build.js
2. 必备命令
npm install <package-name>
npm install -g <package-name> #全局安装
npm uninstall <package-name>
npm list
npm update <package-name>
npm init#初始化创建package.json文件
npm init -y#快速初始化(跳过所有交互)
npm run <script-name>#运行脚本 在 package.json 中定义的脚本
npm cache clean --force#清理缓存
npm audit fix#修复依赖问题
3.版本管理
-
版本号格式
- 语义化版本号(Semantic Versioning)格式:
major.minor.patch
,例如1.2.3
。- major(主版本号): 重大变更,不向后兼容。
- minor(次版本号): 新功能,向后兼容。
- patch(补丁版本号): Bug 修复,向后兼容。
- 语义化版本号(Semantic Versioning)格式:
-
符号含义
^1.2.3
: 接受1.x.x
的版本,但不超过2.0.0
。~1.2.3
: 接受1.2.x
的版本,但不超过1.3.0
。1.2.3
: 固定版本
4. package.json文件
核心字段:
dependencies
: 项目的运行时依赖。devDependencies
: 开发时需要的工具和库(如测试框架)。scripts
: 定义自定义命令脚本。engines
: 指定支持的 Node.js 版本。
{
"name": "my-app",
"version": "1.0.0",
"scripts": {
"start": "node index.js",
"test": "jest"
},
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"jest": "^29.2.1"
}
}
5. 依赖问题
-
删除并重新安装依赖
-
rm -rf node_modules package-lock.json
-
npm install
-
查看依赖冲突
npm ls <package-name>
-
修复漏洞
npm audit fix
6.常见工具
- npx
用于运行 npm 包而无需全局安装
npx create-react-app my-app
-
npm-check-updates
更新依赖到最新版本
npx npm-check-updates -u
npm install
7. 发布包
npm login#登陆npm
#配置keywords .npmignore .gitignore
npm run #跑通同步一下
npm publish#发布包
npm unpublish package --force #删除已发布的包
更新包: npm run (build) ->确保版本号已更新,然后重新发布。
- 使用 .npmrc
文件设置全局配置
save-exact=true # 保存固定版本号
registry=https://registry.npmjs.org/ # 指定仓库地址