2017-02-22 107 views
2

我正在构建Visual Studio Team Services的构建任务。在这个任务中,我使用7zip-bin为Linux,Mac和Windows打包7zip的二进制文件。强制安装npm以安装其他平台的可选依赖关系

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

有没有办法强制npm以某种方式下载所有操作系统可选软件包?还是必须在构建过程中自己下载文件并将其解压缩?

现在,我使用

npm install 7zip-bin --save 

导致:

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

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

npm install 7zip-bin-linux --save 

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

我明白我不能运行这些在我的机器上,但我需要将它们打包到一个vsix文件(ZIP荣耀),所以当我的生成任务是在这些平台上运行,我可以使用它们。

回答

1

您应该依赖这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强制安装。

+0

当我这样做时,其中只有一个是实际下载和安装的(或者我在安装时遇到错误)。结果,'vsix'只与构建扩展的平台兼容。 – jessehouwing

+0

啊,我看到,它不是自己指定它们时安装的。但是,您可以使用'-f'或'--force'标志来强制安装:)我更新了答案。 –

+0

啊!这似乎工作! PS'7zip-bin'执行相关软件包的自动解析。 – jessehouwing