【问题标题】:Force npm install to install optional dependencies for other platforms强制 npm install 为其他平台安装可选依赖项
【发布时间】:2017-02-22 16:16:17
【问题描述】:

我正在为 Visual Studio Team Services 构建构建任务。在这个任务中,我使用7zip-bin 为 linux、mac 和 windows 的 7zip 打包二进制文件。

这一切都很好,如果我能够将 package.json 部署到构建服务器,它会起作用,但是没有......构建任务在构建时包含其所有依赖项。

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

我现在正在使用

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)中,以便在我的构建任务运行时使用它们在这些其他平台上。

【问题讨论】:

    标签: node.js npm cross-platform npm-install azure-pipelines-build-task


    【解决方案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来强制安装。

    【讨论】:

    • 当我这样做时,实际上只下载并安装了这 3 个中的一个(或者安装时出现错误)。因此,vsix 仅与构建扩展的平台兼容。
    • 啊,我明白了,当您自己指定它们时,它也没有安装。但是,您可以使用 -f--force 标志强制安装 :) 我更新了答案。
    • 啊!这似乎行得通! PS 7zip-bin 自动解析依赖包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 2020-09-17
    • 2015-08-09
    • 2018-02-01
    • 2016-01-24
    相关资源
    最近更新 更多