2016-10-02 8 views
0

私は電子アプリケーションに取り組んでおり、sqlite3データベースを追加したいと思っています。 電子のネイティブモジュールに問題があるため、npmのインストール後に電子リビルドを実行する必要があります。 私が今持っているもの:私のgulpタスクからelectron-rebuildを実行するには?

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です:私は追加したい何

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

。しかし、私がcmdから手動で実行すると、正常に動作します。

gulpタスクから.cmdファイルを実行する方法は一般的な質問です。

ありがとうございます。

答えて

1

最初に、あなたの「主な」質問に対する答えはではなくあなたのgulpタスクから電子CMDを実行します。

electron-rebuildは、gulpから独自のAPIを介して直接呼び出すことができるためです。 execを起動したり、プロセスを終了してコマンドラインを実行したりする必要はありません。

例として、現在実行中のノードのバージョン(gulpスクリプトを実行している)とパッケージのローカルnode_modulesにインストールされている電子のバージョンに基づいて電子リビルドを行う単純なバージョンのgulpタスクを示します。標準のプロジェクトディレクトリ構造を使用している場合、これはあまり問題なく電子を使って再構築するためのgulpタスクの開始場所として適しているはずです。

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); 
     }); 
}); 

IMO、パッケージのドキュメントはAPI ため程度の超明確ではないですが、彼らはそのオプションに記載された順序で、それを推測するには、ここに概要:https://github.com/electron/electron-rebuild#how-can-i-integrate-this-into-grunt--gulp--whatever

私だけに最初の3つの引数を使用します上記の私の例ですが、おそらくすべてが動作します。このAPIの以前のバージョンでは、64ビットWindowsバージョンのノードから呼び出されたgulpスクリプトで実行しているときに32ビットのWindows実行ファイルをビルドすることはできませんでしたが、最新のバージョンで修正されているかどうかは確認していません。

関連する問題