2016-01-18 41 views
1

我有一個用Electron構建的應用程序。我試圖簡化我的構建過程。例如,縮小一些代碼。我的挑戰是,我不確定如何從Gulp啓動應用程序。目前,我有一個看起來像這樣的任務:來自Gulp的呼叫電子

gulp.task('run', function() { 
    var runSequence = require('run-sequence'); 
    runSequence(['clean', 'copy-resources', 'copy-package'], function() { 
    spawn('electron', ['tmp/index.js']); 
    }); 
}); 

gulp.task('clean', function() { 
    return del(['tmp' + '/**/*']); 
}); 

gulp.task('copy-resources', function() { 
    return gulp.src('src/resources/**/*.*') 
    .pipe(gulp.dest('tmp/resources')) 
    ; 
}); 

gulp.task('copy-package', function() { 
    return gulp.src('package.json') 
    .pipe(gulp.dest('tmp')) 
    ; 
}); 

當我運行它,它像我得到的競爭條件。當電子試圖啓動我的應用程序,我要麼得到了以下錯誤之一:

The app provided is not a valid electron app, please read the docs on how to write one: {url} 

Error: Cannot find module '/Users/me/project/tmp/index.js' 

或此錯誤:

The app provided is not a valid electron app, please read the docs on how to write one: {url} 

Error: Cannot find module 'electron' 

在控制檯窗口中,我有時會看到以下錯誤:

Error: ENOENT: no such file or directory, stat '/Users/me/project/tmp/resources/components/firebase/README.md' 
    at Error (native) 

再次,這些錯誤不會每次都發生。但是,至少有一個錯誤(或另一個錯誤將會發生)。這讓我感覺像是一場競賽狀況正在發生。我可以在提到的目錄中看到該文件。

electron ./tmp/index.js 

我不知道什麼是錯的:在同一時間,如果我用下面的命令行,我可以運行的應用程序。

回答

1

您可以嘗試一個名爲electron-connect的軟件包。我最近用它來達到同樣的目的,而且對我來說效果很好。

您只需設置一個一口任務:

gulp.task('serve', function() { 

    // Start browser process 
    electron.start(); 

    // Restart browser process 
    gulp.watch('app.js', electron.restart); 

    // Reload renderer process 
    gulp.watch(['index.js', 'index.html'], electron.reload); 
}); 

客戶端然後加入要麼...

使用腳本標籤渲染過程

<script>require('electron-connect').client.create()</script> 

或者主要過程

'use strict'; 
var app = require('electron').app; 
var browser = require('electron').BrowserWindow; 
var client = require('electron-connect').client; 

app.on('ready', function() { 
    var mainWindow = new browser({ 
     width: 400, 
     height: 300 
    }); 
    mainWindow.loadUrl('file://' + __dirname + '/index.html'); 

    // Connect to server process 
    client.create(mainWindow); 
}); 
+0

僅供參考如果您的窗口可調整大小,您可能需要添加一個選項以在調整大小時消除大量的控制檯消息...'''client.create(mainWindow,{「sendBounds」:false});'' ' – Josh