Skip to main content

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

发布插件

发布流程

  1. npm init 初始化项目,生成 package.json 文件
  2. 编写代码
  3. 创建.npmignore文件,发布时会忽略里面的文件
  4. 创建 README.md 文件,添加插件描述
  5. 使用邮箱注册 npm 账号
  6. 在 npm 官网查看插件名是否已经注册
  7. 可以运行npm whoami 查看当前用户是不是自己
  8. 在项目下运行 npm login,输入用户名、密码、邮箱
  9. 运行 npm publish
  10. 在 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 文件并不直接记录子模块的信息,而是通过 dependenciesdevDependencies 来指定顶级依赖项。子依赖项的信息是由 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 文件中的版本号也会随着更新。