npm 是 Node.js 的标准包管理工具。 Node.js 项目开发往往会使用 npm 来管理依赖,当然你也可以使用其他包管理器,例如 Yarn,pnpm 等。
准备工作
安装和检查版本
安装 Node.js 时会自动安装 npm。如果你还未安装 Node.js,请先安装 Node.js。
npm 的更新频率往往会比 Node.js 高,你可以通过以下命令来检查 npm 版本:
npm -v
# 我当前的版本是 10.2.5
升级 npm
可以通过下面的命令将 npm 更新到最新版本:
npm install npm@latest -g
初始化项目
一个 package.json
文件会列出项目所依赖的软件包,并且可以通过语义化的规则来控制软件包的版本,这十分有利于项目的合作和共享。一个 package.json
文件必须拥有 "name"
和 "version"
。
可以通过下面的命令在当前目录生成 package.json
文件:
npm init
该命令还可以使用 --yes
标志,根据当前目录信息生成默认值。
npm init --yes
# 效果同上
npm init -y
你可以在 package.json
文件中指定一些任务,通过以下方式运行:
npm run <任务名称>
本地安装
关于依赖项
依赖项有以下两类:
dependencies
: 项目在生产环境下需要的软件包。devDependencies
: 仅在开发和测试环境下需要的软件包。
安装本地包
该操作会将包安装到当前文件夹中的 node_modules 文件中
你可以通过下面的方式将依赖项添加到 package.json
的 dependencies
:
npm install <包名> --save
# 效果同上
npm install <包名>
# 安装包的对应版本 x.x.x
npm install <包名@版本号>
同样的,你也可以将依赖项添加到 devDependencies
中:
npm install <包名> --save-dev
# 效果同上
npm install <包名> -D
安装 package.json
文件中的所有依赖,可以通过下面的方式:
# 安装项目中的包
npm install
# 在生产环境下
npm install --production
更新本地包
定期更新依赖可以保证你的项目处于最新状态,当然,有可能会遇到一堆麻烦
你可以在 package.json
文件所在目录执行下面的命令:
npm update
在此之前可以你可以通过下面的方式检查安装的软件包的版本:
npm outdated
在你执行完npm update
,该命令应没有任何输出。
卸载本地包
卸载的操作与安装基本类似,只需要将 install
变成 uninstall
。
只是从 node_modules
目录中删除包:
npm uninstall <包名>
同时从 package.json
文件中删除依赖:
npm uninstall --save <包名>
作为 devDependency
安装的需要通过 --save-dev
参数才可以卸载:
npm uninstall --save-dev <包名>
删除当前项目文件所有依赖
# 可用性存疑
npm uninstall *
卸载完成后,你可以查看
node_modules
目录下对于包的目录已经不见了
全局安装
安装全局包
例如对于一个命令行工具,你可能想将其安装到全局,这样你可以在任何目录下使用这个包:
npm install -g <包名>
# 效果同上
npm install --global <包名>
你可以通过下面的命令查看全局安装的路径:
npm root -g
更新和卸载全局包
找出需要更新的软件包
npm outdated -g --depth=0
更新全局软件包
npm update -g <包名>
更新所有全局软件包
npm update -g
卸载全局包
npm uninstall -g <包名>
理解包和模块
Node.js 和 npm 有着对包(packages)和模块的定义(modules),但是很容易混淆它们。看看官网的解释:
A package is a file or directory that is described by a package.json. A module is any file or directory that can be loaded by Node.js' require().
一个通过 package.json
描述的项目就是包,任何可以被 Node.js 的 require()
加载的就是模块。
因此大部分 npm 软件包都是模块,但这不是必须的。