安装 Node 的时候,会一并安装好 npm。
可以在命令行执行
npm -v
查看 npm 的版本。
配置 npm
-
npm config ls
:查看 npm 的配置信息;为
npm config list
的简写
npm config ls -l
:查看 npm 的详细配置信息 -
npm config get <配置项名称>
:查看 npm 指定配置项的信息
eg:
npm config get registry
– 查看 npm 的镜像源、
npm config get prefix
– 查看 npm 全局依赖包的安装地址 -
npm config set <配置项名称> <值>
:设置 npm 的指定配置项
eg:
npm config set registry https://registry.npmmirror.com/
– 设置 npm 的镜像源为 “淘宝镜像”
常用功能
初始化配置文件
可以执行
npm init
命令行初始化 package.json 文件,需要手动配置基础信息。
也可以执行
npm init -y
命令行初始化 package.json 文件,能自动配置好基础信息。
管理依赖包
-
npm i <包名>
:安装依赖包;为
npm install <包名>
的简写
npm i <包名> -g
:安装全局依赖包
npm i
:安装当前项目需要的所有依赖包
npm i <包名> -D
:安装仅开发环境下使用的依赖包
npm i <包名>@x.x.x
:安装指定版本的依赖包 -
npm un <包名>
:卸载指定依赖包;为
npm uninstall <包名>
的简写
npm un <包名> -g
:卸载全局依赖包 -
npm up <包名>
:更新指定依赖包;为
npm update <包名>
的简写
npm up <包名> -g
:更新全局依赖包
npm up
:更新当前项目正使用的所有依赖包 -
npm outdated
:查看过时的依赖包
如果不确定当前依赖包应该被安装到什么环境下(全局安装 / 安装到生产环境 / 安装到开发环境),可以到 npm 官网 / 依赖包的官网查看一下
查看依赖包的信息
-
npm ls
:查看当前项目已安装的依赖包;为
npm list
的简写
npm ls -g
:查看已安装的全局依赖包
npm ls --depth=0
:限制查看的深度 -
npm v <包名>
:查看指定依赖包在远程仓库上的信息;为
npm view <包名>
的简写
npm v <包名> version
:查看指定包在远程仓库上的最新版本
npm v <包名> versions
:查看指定包在远程仓库上的所有版本
执行脚本
package.json 可以配置
scripts
字段,用来定义一些脚本任务
-
查看所有脚本任务:
npm run
-
执行指定脚本任务:
npm run <脚本任务名>
{
// ...
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
}
nrm(npm 镜像源管理器)
nrm (npm registry manager),npm 镜像源管理器。可以使用 nrm 更方便地查看、测试、切换镜像源。
-
全局安装 nrm:
npm i nrm -g
-
查看所有镜像源:
nrm ls
> nrm ls
* npm ---------- https://registry.npmjs.org/
yarn --------- https://registry.yarnpkg.com/
tencent ------ https://mirrors.cloud.tencent.com/npm/
cnpm --------- https://r.cnpmjs.org/
taobao ------- https://registry.npmmirror.com/
npmMirror ---- https://skimdb.npmjs.com/registry/
-
镜像源测速:
nrm test
> nrm test
* npm ------ 1023ms
yarn ----- 1020ms
tencent -- 1523ms
cnpm ----- 453ms
taobao --- 445ms
npmMirror - 934ms
-
使用指定镜像源:
nrm use <镜像源名称>
> nrm use taobao
Registry has been set to: https://registry.npmmirror.com/
-
添加自定义镜像源:
nrm add <自定义镜像源名称> <自定义镜像源地址>
-
删除镜像源:
nrm del <镜像源名称>
开发自己的依赖包
编写包
-
创建 sum-tool 目录,作为项目的根目录
-
在根目录下创建如下 3 个文件:
-
- package.json – 用来描述包的元数据文件
- index.js – 包的入口文件
- README.md – 包的说明文档
-
编写 package.json:
{
"name": "sum-tool", // 包名, 不能与其他包名相同
"version": "1.0.0", // 版本号
"description": "这里是对包的一些个描述信息",
"main": "index.js", // 入口文件
"keywords": ["math", "sum"], // 搜索关键字
"author": "superman", // 作者
"license": "ISC", // 许可协议,默认为 "ISC"
}
- 编写 index.js:
export default (a, b) => a + b;
- 编写 README.md,只要能清晰地说明包的功能、用法、注意事项即可
发布包
- 到 npm 官网注册 npm 账号
-
在终端登陆 npm 账号:
npm login
注意:在运行 npm login 之前需要先把 npm 镜像源切换回 npm 的官方服务器,否则无法成功登录 -
在项目的根目录下执行
npm publish
即可将项目发布到 npm 上
删除包
-
在终端登录 npm 账号:
npm login
注意:在运行 npm login 之前需要先把 npm 镜像源切换回 npm 的官方服务器,否则无法成功登录 -
执行
npm unpublish <包名> -f
即可删除已发布的 npm 包
注意:① 只能删除 72 小时内发布的包、② 在 24 小时内不能重新发布被删除的包
其他实用功能
锁定依赖包版本
默认情况下,npm 安装依赖后,其版本号会显示为如下形式:
{
"devDependencies": {
"lodash": "^4.17.21",
"webpack": "^5.87.0",
"webpack-cli": "^5.1.4"
}
}
符号
^
表示只允许小版本的升级。
我们可以执行命令
npm config set save-prefix='~'
,再安装依赖可以发现
^
变成了
~
表示只允许补丁包的升级
还可以执行命令
npm config set save-exact true
,再安装的依赖就会被锁定版本号
还可以在安装或更新依赖包后执行命令
npm shrinkwrap
来锁定项目的依赖包版本。
它会根据 node_modules 中的实际安装情况生成 npm-shrinkwrap.json,以记录每个依赖包的确切版本和来源。
npm-shrinkwrap.json 文件会优先于 package-lock.json,在执行
npm i
时被使用。
注意:
npm shrinkwrap
只会锁定项目的直接依赖包,而不会锁定子依赖包。如果你想锁定所有的依赖包,你可以使用
--lockfile-version 2
标志,来生成一个兼容 npm v7 的 npm-shrinkwrap.json 文件。
npm shrinkwrap 命令只适用于发布到 npm 镜像源的项目,如果你只是在本地开发,你不需要使用这个命令。package-lock.json 文件已经足够保证你的本地开发环境的一致性
安装可靠的依赖包
可以使用
npm ci
命令来安装项目的依赖包,它会根据 package-lock.json 或者 npm-shrinkwrap.json 中的确切版本和来源来安装依赖包
使用该命令时需要注意:
-
项目必须存在的 package-lock.json 或 npm-shrinkwrap.json;如果没有,
npm ci
将不起作用。 -
如果锁文件中的依赖包和 package.json 中的依赖包不匹配,
npm ci
会退出并报错,而不会更新锁文件。 -
npm ci
只能安装整个项目的依赖包,不能添加单个的依赖包。 -
如果文件夹 node_modules 已存在,它会在
npm ci
开始安装之前自动删除它。 -
npm ci
通常会比
npm i
快很多,因为它跳过了一些面向用户的特性,比如检查版本范围、生成锁文件、修改 package.json 等。
删除重复的依赖包
可以使用
npm dedupe
命令来消除 node_modules 目录中重复的依赖包。
npm dedupe
会遍历依赖树,将每个依赖包尽可能地移到最高的层级,这样可以让多个依赖包更有效地共享同一个依赖包。
这样可以生成一个即扁平又去重的依赖树。
npm dedupe
可以使用
--dry-run
或
--json
标志来查看预期的结果,而不进行实际操作。