node.js - package.json 中的条件安装后取决于您的操作系统?

标签 node.js

在我的 package.json 中,我在 Linux 机器和 Windows 机器之间切换时遇到了这个问题:

"postinstall": "node.exe node_modules/bower/bin/bower install" (for Windows)
"postinstall": "./node_modules/bower/bin/bower install" (for Linux)

我必须根据我的环境不断交换这些行 - 我怎样才能做到这一点跨操作系统,以便它可以在两个地方工作?

我想做这样的事情:

"postinstall": isOSWindows ? "node.exe node_modules/bower/bin/bower install" : "./node_modules/bower/bin/bower install"

最佳答案

首先,我认为您不需要切换操作系统来从本地依赖项运行 Bower。

将 Bower 安装为 devDepedency 后,您可以在 package.json 中设置示例脚本

"scripts":{
  "postinstall": "bower install"
}

然后运行npm install,应该可以工作。

这是可能的,因为在 node_modules 文件夹中将 Bower 安装为本地依赖项后,.bin 文件夹中会生成 Bower 脚本的可执行版本

enter image description here

或者,如果您想在操作系统之间切换,可以使用此技术。

为了不必使用很长的脚本命令,我将其放入外部脚本中并使用process.platform,类似于script.js

const {exec} = require('child_process');

if (process.platform !== 'win32') {
  // run scripts for Windows
  return;
}

const commands = [
  'set NODE_ENV=e2e_tests',
  'npm run start-local-test-environment',
  'grunt build',
  'nightwatch ./test/e2e/tests --skipgroup common,helpers --env chrome'
];

const executedCommands = exec(commands.join('&&'), (error) => {
  if (error) {
    throw error;
 }
});

然后在 package.json 脚本中你可以有:

“postinstall”:“Node ./scripts/script.js”,

关于node.js - package.json 中的条件安装后取决于您的操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44956778/

相关文章:

javascript - selenium webdriver 不适用于 jasmine

javascript - 我应该如何处理 Electron 中面向用户的插件?

javascript - Node.js 有必要设置 Content-Type 吗?

mongodb - 动态 node.js 内容

javascript - 在 NodeJS 中发出外部 HTTP 请求的单元测试 Controller 功能

node.js - Nodemailer 退出时不会发送邮件

node.js - 尽管 Mongoose 连接到所需的数据库, Mongoose 集合还是创建了自己的数据库

node.js - 当两个不同的文件引用时, typescript 找不到外部模块

node.js - NodeJS http 和 https 模块有什么区别?

javascript - 本地 Passport 身份验证策略提供临时 header