npm 中 dependencies 和 devDependencies 的使用

导读

使用 npm 作为包管理工具已经很多年了,但是常用的其实就那么几个功能,一些基础的但很重要的概念和用法反而不太清楚。最近抽空整理并探索一下,重新学习 npm 。

今天先对 package.json 配置文件中的 dependencies 和 devDependencies 做一番研究。

dependencies

  1. 使用环境:生产环境下所依赖的 npm 包集合;
  2. 命令行安装单个包的方式:

    1
    2
    3
    4
    # 在与 package.json 同级目录下执行
    # —sava-prod 为默认安装模式
    # 安装以后会自动在 package.json 的 dependencies 下添加 <package-name>
    npm install <package-name> [—sava-prod]
  3. 命令行集成安装方式:

    1
    2
    3
    4
    5
    # 在与 package.json 同级目录下执行
    # 安装 dependencies 和 devDependencies 中的所有 npm 包
    npm install
    # 仅安装 dependencies 下的所有 npm 包
    npm install —production
  4. 被调用:如果将当前工程作为一个单独包,提供给其他人使用,在对方使用 npm install 命令安装时,会自动下载 dependencies 下的包集合。

devDependencies

  1. 使用环境:开发和测试环境下所依赖的 npm 包集合;
  2. 命令行安装单个包的方式:

    1
    2
    3
    # 在与 package.json 同级目录下执行
    # 安装以后会自动在 package.json 的 devDependencies 下添加 <package-name>
    npm install <package-name> —sava-dev
  3. 命令行集成安装方式:

    1
    2
    3
    # 在与 package.json 同级目录下执行
    # 安装 dependencies 和 devDependencies 中的所有 npm 包
    npm install
  4. 被调用:如果将当前工程作为一个单独包,提供给其他人使用,在对方使用 npm install 命令安装时,不会自动下载 devDependencies 下的包集合。

建议

部署

在我以往写代码的过程中,对于需要引用包的位置,并没有做任何区分,因为在使用 npm install 时会一起安装,所以没有太在意,直到使用 nest.js 时发现,默认安装的包居然有 200M 之多。

当我需要自动化部署它们到一台线上服务器时,会花费很多时间,但其实像 @nestjs/cli 、 @types/supertest 等开发和测试工具在线上根本是用不着的。

于是我对于要往线上环境上传的工程使用了 npm install —production 命令,这时文件大小缩小为 11M ,然后再压缩以后,最终仅仅剩下了 5M 。

发布

当整个工程开发完毕,作为一个独立包待发布时,同样需要注意!如果不对 dependencies 和 devDependencies 加以区分,将开发/测试依赖写在生产依赖下,会导致调用该 npm 包的用户下载很多与其无关的包,从而造成不必要的资源浪费。

参考来源

Specifying dependencies and devDependencies in a package.json file | npm Documentation
npm install 你很明白吗 - NeverYu - CSDN博客