跨平台 npm 启动脚本

Cross platform NPM start script

我正在构建一个 Electron 应用程序,它将由 Windows 和 OS X 上的人们开发。我想创建一个跨平台的启动脚本。到目前为止,我得到有用的东西的运气完全是零。我认为问题在于我需要设置 NODE_ENV 环境变量并且语法略有不同。

我希望有一种我还没有找到的方法。我当前的脚本部分如下:

"scripts": {
    "start:osx": "NODE_ENV=development electron ./app/",
    "start:win": "set NODE_ENV=development && electron ./app/"
}

我真的很想创建一个 "start" 脚本并消除特定于平台的变体。可能吗?

环境变量是 Windows 中的一个问题。

正如 Domenic Denicola(npm 的主要贡献者之一)所述:

This is not npm's job. You can run custom Node scripts to set environment variables using process.env if you'd like, or use something that isn't environment variables (like JSON).

...

You can write custom scripts to work around connect's limitations, e.g. in your tests modify process.env.

(Reference : this issue)

所以我们将通过 JS 脚本进行管理(解决方案受此 commit 启发):

  1. scripts 目录中创建 exec.js 文件

  2. exec.js中复制以下代码:

var exec = require('child_process').exec;

var command_line = 'electron ./app/';
var environ = (!process.argv[2].indexOf('development')) ? 'development' : 'production';

if(process.platform === 'win32') {
  // tricks : https://github.com/remy/nodemon/issues/184#issuecomment-87378478 (Just don't add the space after the NODE_ENV variable, just straight to &&:)      
  command_line = 'set NODE_ENV=' + environ + '&& ' + command_line;
} else {
  command_line = 'NODE_ENV=' + environ + ' ' + command_line;
}

var command = exec(command_line);

command.stdout.on('data', function(data) {
  process.stdout.write(data);
});
command.stderr.on('data', function(data) {
  process.stderr.write(data);
});
command.on('error', function(err) {
  process.stderr.write(err);
});
  1. 更新您的 package.json :
"scripts": {
    "start": "node scripts/exec.js development",
}
  1. 运行 npm 脚本:npm run start

编辑 05.04.2016

有一个非常有用的 npm 包可以解决这个问题:cross-env。 运行 跨平台设置环境变量的命令