跨平台NPM启动脚本

时间:2015-10-06 13:35:23

标签: npm electron

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

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

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

我真的想创建一个单独的“开始”脚本并消除特定于平台的变体。有可能吗?

1 个答案:

答案 0 :(得分:9)

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

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

  

这不是npm的工作。如果您愿意,可以使用process.env运行自定义Node脚本来设置环境变量,或者使用不是环境变量(如JSON)的东西。

     

...

     

您可以编写自定义脚本来解决连接的限制,例如:在你的测试中修改process.env。

     

(参考:this issue

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

  1. # ... \Config::set('database.connections.tenant.database', $username); \Config::set('database.default', 'tenant'); \DB::reconnect(); \DB::setDatabaseName($username); # ... 目录中创建exec.js文件

  2. scripts中复制以下代码:

  3. exec.js
    1. 更新您的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); });
    2. package.json
      1. 运行npm脚本:"scripts": { "start": "node scripts/exec.js development", }
      2. 编辑05.04.2016

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