node.js - 强制 npm install 为其他平台安装可选依赖项

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

我正在为 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)中,这样我就可以在什么时候使用它们我的构建任务正在这些其他平台上运行。

最佳答案

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

关于node.js - 强制 npm install 为其他平台安装可选依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42396791/

相关文章:

javascript - passport-local-mongoose 错误消息更改

node.js - 如何在无服务器框架上包含静态文件?

node.js - 如何补救 "Error: Cannot find module ' child-process-close'"?

npm:如何在 Windows (10) 中设置 NODE_ENV?

c++ - 如何为 mac 创建应用程序?

javascript - 如何根据套接字事件呈现新的 jade View ?

javascript - 如何在 Sails.js v0.11 中触发自定义套接字事件?

node.js - Node 以错误退出状态结束 3221225786

kotlin - 如何将 kotlin 原生代码编译成 iOS 框架?

cross-platform - 开发人员应该了解界面设计、可用性和用户心理方面的哪些知识才能创建出色的软件?