2016-10-02 64 views
0

我正在研究電子應用程序,並希望將sqlite3數據庫添加到它。 電子本地模塊有問題,所以我需要在npm安裝後運行電子重建。 我現在擁有的一切:如何從我的吞嚥任務中運行電子重建?

gulp.task('nb:dist-node-modules', [], function(){ 
    return gulp.src('./package.json') 
     .pipe(gulp.dest(DIST_APP)) 
     .pipe(install({ production: true })); 
}); 

我想上傳的內容:

gulp.task('nb:dist-node-modules-rebuild', ['nb:dist-node-modules'], function(){ 
    //var exec = require('child_process').exec; 
    var exec = require('gulp-exec'); 
    exec(DIST_APP + '/node_modules/.bin/' + 'electron-rebuild.cmd');  
}); 

的問題是,電子rebuild.cmd以這種方式行不通。雖然,當我從cmd手動運行它時,它工作正常。

我認爲一般問題是 - 如何從gulp任務運行.cmd文件。

非常感謝。

回答

1

首先,您的「主要」問題的答案是 - 不是從您的一task任務中運行電子CMD。

原因是electron-rebuild可以通過自己的API從gulp內部直接調用。您不需要啓動exec或啓動進程並嘗試命令行運行。

舉個例子,下面是一個簡單版本的gulp任務,它根據從當前運行的節點版本(執行gulp腳本)找到的配置和安裝在軟件包本地node_modules中的電子版本進行電子重建。如果您使用的是標準項目目錄結構,那麼這應該是一個很好的起始位置,可以讓您用電子重建任務,而不會有太多麻煩。

var electronPackage = require('electron/package.json'); 
// pull the electron version from the package.json file 
var electronVersion = electronPackage.version; 

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

    var eRebuild = require('electron-rebuild'); 
    var process = require('process'); 
    var arch = process.arch; 

    eRebuild.default(__dirname, electronVersion, arch) 
     .then(function() { 
      console.info('Electron Rebuild Successful'); 
      return true; 
     }).catch(function(e) { 
      log('Rebuilding modules against Electron didn\'t work: ' + e); 
     }); 
}); 

海事組織,包文檔不是關於API 爲了超清晰,但他們在他們的選擇中列出的順序推斷概述這裏:https://github.com/electron/electron-rebuild#how-can-i-integrate-this-into-grunt--gulp--whatever

我只能用第3個參數我上面的例子,但據推測他們都工作。在此API的以前版本中,我發現在從64位Windows版本的Node調用的gulp腳本中運行時構建32位Windows可執行文件不起作用,但我沒有檢查是否在最新版本中修復了該問題。