npm install不构建供应商可执行文件

时间:2015-12-23 20:44:21

标签: node.js

TL; DR:为什么npm不构建依赖项的二进制可执行文件,如何在没有明确npm rebuild的情况下构建它们?

我的项目在常规的package.json中描述了它的依赖项。当我运行npm install时,所有软件包都按预期安装在node_modules中。但是,有三个软件包有供应商子目录,它们应该包含二进制可执行文件,并且它们没有按预期编译。

  

$ ls / usr / src / app / node_modules / optipng-bin / vendor /
  ls:无法访问/ usr / src / app / node_modules / optipng-bin / vendor /:没有这样的文件或目录

要解决这个问题,我需要在3个软件包中的每一个上运行“npm rebuild”:

  • npm rebuild node-sass
  • npm rebuild jpegtran-bin
  • npm rebuild optipng-bin
  

$ npm rebuild optipng-bin

     

> optipng-bin@3.0.4 postinstall / usr / src / app / node_modules / optipng-bin
  > node lib / install.js

     

✔optipng预构建测试成功通过

     

optipng-bin@3.0.4 / usr / src / app / node_modules / optipng-bin

     

$ ls / usr / src / app / node_modules / optipng-bin / vendor /
  的使用OptiPNG

当我自己运行npm rebuild时,我想也许会“知道”构建其中的每一个,而是重建一些其他包(没有可执行文件):

  

$ npm rebuild

     

> history@1.13.1 postinstall / usr / src / app / node_modules / history
  >节点./npm-scripts/postinstall.js

     

> react-router@1.0.0 postinstall / usr / src / app / node_modules / react-router
  >节点./npm-scripts/postinstall.js

     

> spawn-sync@1.0.13 postinstall / usr / src / app / node_modules / spawn-sync
  > node postinstall

如何让npm在其供应商目录中安装属于这3个依赖项的二进制可执行文件(每个都没有明确的rebuild)?

2 个答案:

答案 0 :(得分:0)

事实证明这是npm 3.3.7(以及可能的其他版本的npm)中的错误。升级到npm 3.5.3为我修复了它。见https://github.com/npm/npm/issues/6679

答案 1 :(得分:0)

如果缺少供应商可执行文件,可能是因为架构不匹配。在进出 Docker 容器或从 x86 切换到 Arm 时可能会发生这种情况。

首先尝试删除 node_modulespackage-lock.json,然后尝试删除 npm install。如果这不起作用,可执行文件可能能够使用 npm rebuild --force <module_name> 强制构建。