一、基本概念

npm 全称为 Node Package Manager,是一个基于 Node.js 的包管理器,也是 Node.js 社区最流行、支持的第三方模块最多的包管理器。它的初衷就是让开发人员更容易分享和重用代码。npm 提供了命令行工具,其主要功能是管理Node.js包,包括安装、更新、删除、查看、搜索、发布等。 ​

npm 最初只是Node.js 的包管理器,但随着前端技术的不断发展,它的定位变成了广义的包管理器,可以实现JavaScript、React、Vue、Gulp、移动开发等包管理,是目前最大、生态最为健全的包管理器。​

命令作用
npm -v查看 npm 版本。
npm init初始化后会出现一个 package.json 配置文件。可以在后面加上 -y ,快速跳过问答式界面。
npm install根据项目中的 package.json 文件自动下载项目所需的全部依赖。
npm install 包名 --save-dev(npm install 包名 -D)安装的包只用于开发环境,不用于生产环境,会出现在 package.json 文件中的 devDependencies 属性中。
npm install 包名 --save(npm install 包名 -S)安装的包需要发布到生产环境的,会出现在 package.json 文件中的 dependencies 属性中。
npm list查看当前目录下已安装的 node 包。
npm list -g查看全局已经安装过的 node 包。
npm --help查看 npm 帮助命令。
npm update 包名更新指定包。
npm uninstall 包名卸载指定包。
npm config list查看配置信息。
npm info 指定包名
查看远程 npm 上指定包的所有版本信息。
npm config set registry registry.npm.taobao.org修改包下载源,这里修改为了淘宝镜像。
npm root查看当前包的安装路径。
npm root -g查看全局的包的安装路径。
npm ls 包名查看本地安装的指定包及版本信息,没有显示 empty。
npm ls 包名 -g查看全局安装的指定包及版本信息,没有显示 empty。

二、安装依赖

可以使用npm install命令来安装需要的包,如果想把这个包自动添加到package.json中,可以执行以下命令,这里以安装React为例:

npm install react --save

如果想要安装不同版本的包,可以这样:

// 安装最新版本
npm install react@latest
// 安装指定版本
npm install react@16.8.0
// 安装指定区间版本
npm install react@">=16.8.0 <17.0.1"

当使用npm安装依赖时,分为本地安装(local)和全局安装(global),它俩的区别就是是否包含-g参数:

 可以使用require关键字来引入本地安装的包。为了避免引用模块消失,保证依赖模块都会出现在package.json中,最好在npm install 时加上--save。​

三、锁定版本

当使用--save来安装依赖时,npm 会把这个依赖保存起来,并添加^前缀,他表示,当再次执行 npm install 命令时,会自动安装这个包在此大版本下的最新版本。如果想要修改这个功能,可以执行以下命令:

npm config set save-prefix='~'

执行完该命令之后,就会把^符号改为~符号。当再次安装新模块时,就从只允许小版本的升级变成了只允许补丁包的升级。​

如果想要锁定当前的版本,可以执行以下命令:

npm config set save-exact true

这样每次 npm install xxx --save 时就会锁定依赖的版本号,相当于加了 --save-exact 参数。建议线上的应用都采用这种锁定版本号的方式。​

为了彻底的锁定依赖的版本,让应用在任何机器上都安装同样的版本,可以执行以下命令:

npm shrinkwrap

执行这个命令之后,就会在项目的根目录产生一个npm-shrinkwrap.json配置文件,这里面包含了通过node_modules 计算出的模块的依赖树及版本。只要目录下有 npm-shrinkwrap.json 则运行 npm install 时就会优先使用 npm-shrinkwrap.json 中的配置进行安装,没有则使用 package.json 进行安装。

四、更新,卸载依赖

npm 为我们提供了更新依赖版本的命令:

npm update [package name]

如果想要更新全局安装的模块,需要添加参数 -global:

npm update -global [package name]

当执行这两个命令时,它会先到远程仓库查询最新版本,然后查询本地版本。如果本地版本不存在,或者远程版本较新,就会安装。​

如果想要更新该依赖包在package.json中的版本,就需要使用-S或者--save参数。需要注意的是,从npm v2.6.1 开始,npm update只会更新顶层的模块,而不更新依赖的依赖模块,而之前的版本是递归更新的。如果想要这种效果,可以使用以下命令:

npm --depth 9999 update

除了可以更新包之外,还可以删除指定的包:

npm uninstall [package name]

如果想要删除全局的包,需要添加参数 -global:

npm uninstall [package name] -global

五、安装可靠的依赖

可以使用 npm ci 命令来清理、安装依赖项。它通常用于CI/CD等自动化环境,使用它可以获得可靠的依赖。

npm ci

当执行该命令时,它会先删除本地的node_modules文件,因此它不需要去校验已下载文件版本与控制版本的关系,也不用校验是否存在最新版本的库,所以下载的速度相比npm install会更快。之后它会按照 package-lock.json 文件来安装确切版本的依赖项。并且不会将这个版本写入package.json或者package-lock.json文件。 ​

使用该命令时,需要注意:

 六、删除重复的包

我们可以通过运行npm dedupe命令来删除重复的依赖项。该命令通过删除重复包并在多个依赖包之间共享公共依赖项来简化整体的结构。它会产生一个扁平的、去重的树。

npm dedupe
npm ddp

可以运行 npm audit 命令来扫描项目,来查找所有依赖项中存在的漏洞:

npm audit

来看我的项目扫描结果:

可以运行以下命令来自动安装所有易受攻击包的补丁版本:

npm audit fix

六、测试本地包

当我们在本地开发npm模块时,可以使用npm link命令来将本地的npm模块连接到对用的项目中去,便于对模块进行调试和测试。使用方式也很简单,在项目中执行以下命令:

npm link

执行完该命令之后,就会为这个npm包创建到全局,路径是 {prefix}/lib/node_modules/<package>,它是一个快捷方式。之后我们就可以使用以下命令来在需要这个模块的项目中链接这个包:

npm link 模块名

这里的模块名就是依赖包的名称,也就是模块包的package.json文件中的name字段值。​

如果不想继续使用了,执行以下命令来解除link即可:

npm unlink 模块名

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐