npm安装不build立供应商可执行文件

TL; DR:为什么npm不会构build依赖关系的二进制可执行文件,以及如何构build它们而不显式地使用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重build节点sass
  • npm重buildjpegtran-bin
  • npm重buildoptipng-bin

$ npm重buildoptipng-bin

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

✔optipng预构buildtesting成功通过

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

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

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

$ npm重build

> 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
>节点安装后

我如何获得npm安装属于这3个依赖关系的二进制可执行文件在他们的供应商目录(没有明确的rebuild每个)?

事实certificate,这是一个错误在npm 3.3.7(也可能是其他版本的npm)。 升级到npm 3.5.3为我修好了。 见https://github.com/npm/npm/issues/6679