2015-10-06 35 views
8

Hem Windows hem de OS X'te millet tarafından geliştirilecek bir Electron uygulaması yapıyorum. Çapraz platform başlatma komut dosyası oluşturmak istiyorum. Şimdiye kadar, çalışan bir şey almak için tam olarak sıfır şansım oldu. Sorun, bence, NODE_ENV ortam değişkenini ayarlamam ve sözdizimi biraz farklı.Çapraz platform NPM başlangıç ​​komut dosyası

Henüz daha bulamadığım bir yol olduğunu umuyorum. Benim şu anki komut bölüm aşağıdaki gibidir:

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

Gerçekten platforma özel varyantları tek bir "başlangıç" komut dosyası oluşturmak ve ortadan kaldırmak istiyorum. Mümkün mü?

cevap

8

Ortam değişkenleri Windows'ta bir sorundur.

Bu UÖM'nin iş değil:

olarak Domenic Denicola (NPM başlıca kaynaklarından biri) belirtti. İsterseniz, process.env kullanarak ortam değişkenlerini ayarlamak için özel Düğüm komut dosyalarını çalıştırabilir veya ortam değişkenleri olmayan (JSON gibi) bir şey kullanabilirsiniz. Sen mesela Connect'in sınırlamaları etrafında çalışmak için özel komut dosyaları yazabilirsiniz

... Testlerinizde process.env'yi değiştirin.

(Referans: this issue)

Yani biz (bu commit ilham Çözüm) bir JS komut dosyası üzerinden yönetmek edeceğiz:

  1. bir scripts dizinde bir exec.js dosyası oluşturun

  2. Aşağıdaki kodu exec.js kopyalayın:

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. Güncelleme senin package.json:
"scripts": { 
    "start": "node scripts/exec.js development", 
} 
  • Çalıştır npm komut
      : npm run start

    Düzenleme 05.04.2016

    Bu sorunu yöneten çok yararlı bir npm paketi vardır: cross-env. Ortam değişkenlerini

  • +0

    arasında ayarlayan komutları çalıştırın. Kapsamlı yanıt için teşekkürler. Bunu bir günlüğüne test etme şansım olmayacak, ama aradaki farkı üstlenecek çünkü problem için harika bir çözüm gibi görünüyor. Her şey iyi gittiğinde, onu cevap olarak işaretleyeceğim. Tekrar teşekkürler! –

    İlgili konular