2016-10-03 38 views
6

Şu anda electron aracılığıyla bir masaüstü uygulaması olarak mevcut olacak bir web oyunu üzerinde çalışıyorum. Oyunun web sürümünü oluşturuyorsam, require('electron')'u istemiyorum. benim yapı komut node main.js true gibi bir şey olsaydıYML oluşturma dosyamma göre Javascript'te farklı modüllere nasıl gereksinim duyarım?

cmd: browserify {PROJECT_PATH}/js/main.js > {PROJECT_PATH}/js/bundle.js && {PROJECT_PATH}/index.html 
name: 'web' 
targets: 
    electron: 
    cmd: browserify {PROJECT_PATH}/js/main.js > {PROJECT_PATH}/js/bundle.js && electron {PROJECT_PATH} 

, sadece boolean argüman başvurmak ve sonra ya require('electron') için JavaScript kullanabiliriz şu şekildedir: Ben build ile kullanmak

Benim .yml dosyasıdır ya da değil. Ancak, şu anki durumumun nasıl yapılabileceğinden emin değilim. Başka bir deyişle

, benim .yml yapı dosyası üzerinden bir boolean argüman geçmek istiyorum ve kullanımı biraz böyle boole söyledi:

if (passedBoolean) { 
    const {app, BrowserWindow} = require('electron'); 
} 

Bunu nasıl yapardın? Eğer mümkün değilse, başka bir çözüm ne olurdu?

cevap

2

Bu sorunu çözmenin çeşitli yolları vardır. Birincisi, platformu yetenekleri hakkında sorgulamaktır. Örneğin, Elektron değişkeni ayarlar:

process.versions.electron 
tarayıcıda çalıştırıyorsanız Bu ayarlanmaz

, böylece kendi varlığı için kontrol edebilirsiniz (ve size Electron koşuyoruz anlarsınız) . İşte belgeler: Electron: Process. iç içe geçmiş bir özellik için

Test biraz brüt olabilir, bu nedenle biraz daha basit bir yolu bir try/catch değeri erişmek için girişimde sarılmasıdır:

try { 
    process.versions.electron; 
} catch (err) { 
    console.log('Not electron', err); 
} 

Güzel bir içine sarın bile olabilir fonksiyonu:

function isPlatformElectron() { 
    'use strict'; 
    try { 
     process.versions.electron; 
     return true; 
    } catch (err) { 
     return false; 
    } 
} 

if (isPlatformElectron()) { 
    // Do Electron-specific stuff here 
} 

alternatif bir yöntem olarak (biraz değiştirilmiş) orijinal kod ile böyle bir şey yapabileceğini:

let app, BrowserWindow; 
try { 
    ({app, BrowserWindow} = require('electron')); 
} catch (err) { 
    console.log('Not electron'); 
} 

if (app && BrowserWindow) { 
    console.log('is electron'); 
} 

Yukarıda önerdiğim işlev yaklaşımını okumak ve tercih etmek için bu sürümü daha zor buluyorum, ancak orijinali gibi yıkımı kullanarak örneği göstermenin yararlı olabileceğini düşündüm (bu durumda const kullanamazsınız).