强制安装npm以安装其他平台的可选依赖项

我正在构buildVisual Studio Team Services的构build任务。 在这个任务中,我正在使用7zip-bin为Linux,Mac和Windows打包7zip的二进制文件。

这是非常好的,如果我有能力只将package.json部署到构build服务器,但是没有…构build任务包含构build时的所有依赖关系,它将工作。

有没有办法强制npm下载所有操作系统可选软件包? 或者我将不得不在构build期间自己下载文件并提取它?

现在我正在使用

 npm install 7zip-bin --save 

其结果是:

 C:\temp>npm install npm WARN optional SKIPPING OPTIONAL DEPENDENCY: 7zip-bin-linux@^1.0.3 (node_modules\7zip-bin\node_modules\7zip-bin-linux): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for 7zip-bin-linux@1.0.3: wanted {"os":"linux","arch":"any"} (current: {"os":"win32","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: 7zip-bin-mac@^1.0.1 (node_modules\7zip-bin\node_modules\7zip-bin-mac): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for 7zip-bin-mac@1.0.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"}) 

当我运行时,直接安装每个可选软件包是不可能的

 npm install 7zip-bin-linux --save 

在Windows机器上,安装被跳过,我得到一个EBADPLATFORM错误。

我知道我不能在我的机器上运行这些,但我需要将它们打包到一个vsix文件(一个美化zip),所以我可以在我的构build任务在这些其他平台上运行时使用它们。

你应该依赖这3个可选的包,因为你永远不知道7zip-bin是否会改变它的可选的依赖关系,你直接使用它。

例如:

 dependencies: { "7zip-bin-mac": "^1.0.1", "7zip-bin-win": "^2.0.2", "7zip-bin-linux": "^1.0.3" } 

无论使用哪种方式,都需要运行npm install -f来强制安装。