2015-10-06 78 views
8

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

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

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

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

回答

8

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

如前所述Domenic Denicola(主要贡献者NPM之一):

这不是故宫的工作。如果你愿意,你可以运行自定义节点脚本来设置环境变量,或者使用不是环境变量的东西(比如JSON)。

...

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

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

    有一个非常有用的npm包允许管理这个问题:cross-env。运行跨平台设置环境变量的命令

    +0

    感谢您的全面回答。我不会有机会在一天左右进行测试,而是在这段时间内进行测试,因为它看起来是一个很好的解决方案。一旦我知道一切顺利,我会将它标记为答案。再次感谢! –