跨平台NPM启动脚本 [英] Cross platform NPM start script
问题描述
我正在构建一个由Windows和OS X上的人们开发的Electron应用程序。我想创建一个跨平台的启动脚本。到目前为止,我的运气完全为零。我认为,问题是我需要设置 NODE_ENV
环境变量,并且语法略有不同。
I'm building out an Electron app that will be developed by folks on both Windows and OS X. I'd like to create a cross-platform start script. So far, I've had exactly zero luck getting something that works. The issue, I think, is that I need to set the NODE_ENV
environment variable and the syntax is slightly different.
我希望有一种我尚未发现的方法。我当前的脚本部分如下:
I'm hoping there's a way that I just haven't found yet. My current scripts section follows:
"scripts": {
"start:osx": "NODE_ENV=development electron ./app/",
"start:win": "set NODE_ENV=development && electron ./app/"
}
我真的很想创建一个开始脚本并消除特定于平台的变体。
I'd really like to create a single "start" script and eliminate the platform-specific variants. Is it possible?
推荐答案
环境变量在Windows中是个问题。
Environment variables are a problem in Windows.
如上所述Domenic Denicola(npm的主要贡献者之一):
As stated Domenic Denicola (one of the main contributors to npm) :
这不是npm的工作。您可以运行自定义Node脚本以使用process.env设置环境变量,也可以使用非环境变量的东西(如JSON)。
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).
...
您可以编写自定义脚本来解决connect的限制,例如在您的测试中修改process.env。
You can write custom scripts to work around connect's limitations, e.g. in your tests modify process.env.
(参考:此问题)
因此,我们将通过JS脚本进行管理(解决方案的灵感来自提交):
So we'll manage through a JS script (Solution inspired on this commit) :
-
创建一个<$
脚本
目录中的c $ c> exec.js 文件
Create a
exec.js
file in ascripts
directory
在 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);
});
- 更新您的
软件包.json
:
- Update your
package.json
:
"scripts": {
"start": "node scripts/exec.js development",
}
- 运行npm脚本:
npm运行开始
- Run npm script :
npm run start
编辑05.04.2016
有一个非常有用的npm软件包,可以解决此问题:跨环境。运行跨平台设置环境变量的命令
There is a very useful npm package that allows manages this problem : cross-env. Run commands that set environment variables across platforms
这篇关于跨平台NPM启动脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!