NPM
npm 全称是 Node Package Manager ,是 Node.js 官方内置的包管理工具
初始化
在安装 Node.js 时会自动安装 npm ,所以如果已经安装了 Node.js,可以直接使用 npm。可以通过 npm -v
查看版本号
# 创建空目录
mkdir npm-demo && cd npm-demo
# 执行初始化
npm init
初始化的过程中的注意事项:
- package name 不能使用中文、大写,默认值是文件夹的名称
- version 要求
x.x.x
的形式定义,x 必须是数字,默认值是 1.0.0 - ISC 证书与 MIT 证书功能上是相同的
package.json
可以手动创建与修改
常用指令
<pkg>
表示依赖包的名称
命令 | 描述 |
---|---|
npm init | 初始化,生成 package.json |
npm init -y 或者 npm init --yes | 快速创建 package.json |
npm install <pkg> (简写:npm i ) | 将依赖安装到生产环境中 |
npm uninstall <pkg> (简写 npm uni ) | 卸载依赖包 |
npm update <pkg> | 更新依赖包 |
npm install npm -g | 升级 npm |
npm config get registry | 查看镜像地址 |
npm list -g (简写 npm ls -g ) | 查看全局安装包 |
npm cache clear --force | 清除 npm 缓存 |
npm i --legacy-peer-deps | 在安装依赖时忽略对 peer dependencies 的版本检查 |
安装参数区别
全局安装
npm install <pkg> -g
生产环境安装
npm install <pkg>
默认将依赖安装到生产环境,可以添加--save
参数,简写:-S
,然后会在 package.json 的 dependencies 属性中写入依赖。
npm install <pkg> --save
开发环境安装
简写:-D
, 并在 package.json 的 devDependencies 属性写入依赖。
npm install <pkg> --save-dev
切换淘宝镜像
使用 cnpm 命令
npm install -g cnpm --registry=https://registry.npm.taobao.org
安装成功后即可使用
cnpm install <pkg>
也可以直接设置淘宝镜像源:
npm config set registry https://registry.npm.taobao.org
切换回 npm 镜像:
npm config set registry https://registry.npmjs.org
查看镜像源:
npm get registry
package.json 中的版本符号
版本号形式:major.minor.patch
,即主版本号.次版本号.修补版本号
- major:新的架构调整,不兼容老版本
- minor:新增功能,兼容老版本
- patch:修复 bug,兼容老版本
特殊符号:
^version
,表示版本号中最左边的非 0 数字的右侧可以是任意版本- 如
^17.0.2
表示最大版本是17.x.x
,而不会自动升级到18.0.0
0.2.3
表示最大版本是0.2.x
,不会超过0.3.0
- 如
~version
,表示大概匹配- 如果 minor 版本号指定了 ,那么 minor 版本号不变,而 patch 版本号任意
- 如果 minor 和 patch 版本号未指定,那么 minor 和 patch 版本号任意
~1.2.3
表示版本可以是1.2.x
~1
表示版本可以是1.x.x
发布插件
发布流程
npm init
初始化项目,生成 package.json 文件- 编写代码
- 创建
.npmignore
文件,发布时会忽略里面的文件 - 创建 README.md 文件,添加插件描述
- 使用邮箱注册 npm 账号
- 在 npm 官网查看插件名是否已经注册
- 可以运行
npm whoami
查看当前用户是不是自己 - 在项目下运行
npm login
,输入用户名、密码、邮箱 - 运行
npm publish
- 在 npm 官网查看是否发布成功
插件版本号规则
语义版本号分为 X.Y.Z 三位,分别代表主版本号、次版本号和补丁版本号
- 如果只是修复 bug,需要更新 Z 位
- 如果是新增了功能,但是向下兼容,需要更新 Y 位
- 如果有大变动,向下不兼容,需要更新 X 位
插件升级
首先运行以下命令之一,修改版本
# 补丁【1.0.1】
npm version patch
# 小改【1.1.0】
npm version minor
# 大改【2.0.0】
npm version major
然后再运行一遍发布命令即可
npm publish
插件删除
# 删除某个包
npm unpublish pkg
# 删除某个包的指定版本
npm unpublish pkg@1.0.1
# 强制删除某个包
npm unpublish pkg --force
npx
npx 是 npm 5.2.0 及以上版本中附带的工具,可以在命令行中运行本地安装的 npm 包,而不需要在全局安装它们。
npx 会在当前目录下的./node_modules/.bin
里去查找是否有可执行文件,没有找到的话再从全局里查找是否有安装对应的模块,全局也没有的话就会自动下载对应的模块,npx 会将依赖包下载到一个临时目录,执行完成后删除本地缓存。
例如使用create-react-app
脚手架创建 react 项目:
# 1. 安装create-react-app
npm i -g create-react-app
# 2. 执行命令
create-react-app my-app
使用 npx 只需执行一行命令:
npx create-react-app my-app
npx 参数:
参数 | 说明 |
---|---|
-p, --package | 指定要使用的 npm 包名称或路径,可以与其他参数组合使用 |
-c, --call | 直接调用 JS 代码片段,可以与其他参数组合使用 |
-q, --quiet | 在输出中禁用 npx 的额外信息,只输出命令的输出结果 |
-v, --version | 显示 npx 的版本号 |
-h, --help | 显示 npx 的帮助文档 |
--ignore-existing | 忽略本地已经安装的同名命令,强制使用最新的版本 |
--no-install | 强制使用本地缓存中已经存在的包,不会执行任何安装操作 |
--no-optional | 不会安装可选依赖项 |
--no-peer | 不会安装对等依赖项 |
--no-install-peer-deps | 在安装包时不会安装对等依赖项 |
--npm | 指定要使用的 npm 可执行文件路径 |
--node-arg | 将额外的参数传递给 node 运行时 |
packages.json 配置
browserslistrc
参考资料:https://juejin.cn/post/6844903669524086797
package.json 和 package-lock.json 的区别
- package.json 文件用于定义项目的元数据以及项目依赖关系
- package-lock.json 文件锁定项目的依赖树,记录了所有模块的确切版本号,包括主模块和所有子模块
当执行 npm install
时,Node 会从 package.json 读取依赖信息,并与 node_modules
中的内容进行对比。如果 node_modules
中缺少某些依赖,那么就会下载缺失的依赖。
package.json 文件并不直接记录子模块的信息,而是通过 dependencies
和 devDependencies
来指定顶级依赖项。子依赖项的信息是由 package-lock.json 文件来记录的。
在执行npm install
的时候,Node 从 package.json 文件读取模块名称,从 package-lock.json 文件中获取版本号,然后进行下载或者更新。
因此,正因为有了 package-lock.json 文件锁定版本号,所以在执行npm install
的时候,Node 不会自动更新 package.json 文件中的模块。
版本范围允许的情况下,用npm install pkg
或者npm install pkg@x.x.x
(指定版本号)来进行安装才会更新,package-lock.json 文件中的版本号也会随着更新。