很多时候我们在使用 npm 包的时候,需要构建或安装一些需要依赖本地或者系统的库(例如编译 C++ 拓展)。而这些依赖如何处理通常不是一个简单的问题。npm 包 build-dependencies 刚好解决了这样一个问题。build-dependencies 可以让我们轻松管理那些构建和运行时需要的依赖。
build-dependencies 是什么?
build-dependencies 是一个命令行工具,它执行以下操作:
在你的 package.json 中添加一个 buildDependencies 的字段,记录所有需要在包安装过程中构建的外部依赖
在 npm install 时安装 buildDependencies 定义的本地依赖环境
提供一个命令来测试所需依赖的安装情况
如何使用 build-dependencies ?
步骤1: 安装 build-dependencies
npm install -g build-dependencies
步骤2:配置 build-dependencies
build-dependencies 本质上是一个配置化的工具,它提供了一些方便的方法帮助我们记录那些需要在安装过程中构建的外部依赖。我们只需要在 package.json 文件中添加一个 buildDependencies 属性即可。buildDependencies 中包含三个属性: include、exclude 和 optional。其中,include 定义了必须要安装的依赖(Environment Dependencies);exclude 定义了不需要安装的依赖;optional 用于标记那些可选的依赖项。
-- -------------------- ---- ------- - -------------------- - ---------- - --------- ---------- -- ---------- - ----- - - -
步骤3:使用 build-dependencies
安装包时,只需要运行如下命令:
npm install
如果你已经使用了 buildDepedencies 字段,在执行过程中,它将会安装所有被记录添加到 build-depedencies.include 以及 build-depedencies.optional 的依赖。通过这种方式,我们可以通过一个 npm 命令安装本地所需的所有依赖。如果存在无法安装的环境,请确认你已经安装了 build-dependencies 工具,并运行以下命令进行检查:
build-dependencies check
check 命令将检查所有的 build dependencies 是否可用,它将在一个表格中按照名称和版本号展示依赖信息,这意味着我们可以快速定位那些缺失的环境,以便行动。
示例
一个使用 build-dependencies 的示例是 TypeScript 包。通常,TypeScript 的编译器需要同时安装 node-gyp 和 python。在使用 build-dependencies 后,我们可以很容易的记录这些外部依赖:
-- -------------------- ---- ------- - ------- --------------------- ---------- -------- -------------- --- ------- ----------- ---------- - ------- ----- -------- -- ---- ----------- -- ---- --- -------- ----- -- ----------- --- --------- --- ---------- ------ --------------- - ------------- -------- -- ------------------ - -------------- ----------- -------------- ---------- ------- --------- -- -------------------- - ---------- - --------- ---------- - - -
以上是 TypeScript 包的 package.json 配置,在开发时 npm install 会自动安装 node-gyp 和 python 环境。这样就避免了环境配置不易的问题。
结论
借助于 build-dependencies,我们可以轻松的管理那些需要在安装过程中构建的外部依赖。并且,build-dependencies 提供了一个检查工具,以帮助我们快速定位缺失的环境,从而更好的满足开发和运行的需求。
参考资料
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066c8cccdc64669dde549b