为什么当子模块构建失败时,NPM会成功

Why does NPM success when submodules fail to build?

本文关键字:NPM 成功 失败 模块 构建 为什么      更新时间:2023-09-26

在使用npm时,我经常会遇到一些似乎毫无意义的错误-Visual Studio项目无法构建,构建工具(例如:python.exe/CL.exe)在命令行上不可用等。

我见过的一些包多次构建失败的例子:

  • kerberos
  • 节点gyp
  • bcrypt

这些在npm install期间向控制台抛出带有堆栈跟踪等的大错误消息,显然已经完全失败;然而,NPM像Larry一样愉快地运行着,我的Javascript应用程序和它的所有依赖项中有9次运行良好。

  1. npm install是否使用本地机器上可用的任何编译器递归地重新构建每个依赖项?

  2. 如果是这样的话,考虑到即使是简单的软件包也可能有大量的依赖关系,如果没有安装全套编程语言和编译器,我怎么能做任何事情?

  3. 为什么这些依赖项失败并不一定意味着我的最终项目将无法使用?

  4. 如果构建失败的依赖关系是"可以"的,那么为什么还要麻烦拥有依赖关系呢?

由于在搜索"npm构建失败"等术语时发现了大量的资源,我一直无法找到这些问题的明确答案。

npm将成功,前提是这些依赖关系实际上被标记为可选。ws模块就是一个例子,其中它们对两个可编译的插件有可选的依赖关系。如果构建失败,那么ws只使用纯js回退实现。

插件有时被添加为可选依赖项的原因是,它们(通常)比纯js替代品执行得更快,即使是对于UTF-8验证或对缓冲区内容进行XOR之类的"简单"操作。