在package.json中有条件的postinstall取决于你的操作系统?

时间:2017-07-06 18:50:21

标签: 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"

1 个答案:

答案 0 :(得分:2)

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

devDepedency安装bower后,您可以在package.json

中设置示例脚本
"scripts":{
  "postinstall": "bower install"
}

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

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

enter image description here

或者如果你想在OS之间切换,你可以使用这种技术。

为了不需要长脚本命令我将它放入外部脚本并使用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",