2015-10-06 114 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

    感謝您的全面回答。我不會有機會在一天左右進行測試,而是在這段時間內進行測試,因爲它看起來是一個很好的解決方案。一旦我知道一切順利,我會將它標記爲答案。再次感謝! –