2016-10-02 42 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可执行文件不起作用,但我没有检查是否在最新版本中修复了该问题。