如何从我的gulp任务中运行电子重建?

时间:2016-10-02 12:06:57

标签: node.js gulp electron

我正在研究电子应用程序,并希望为其添加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');    
});

问题是electron-rebuild.cmd不能以这种方式工作。虽然,当我从cmd手动运行它时,它工作正常。

我认为一般问题是 - 如何从gulp任务运行.cmd文件。

非常感谢。

1 个答案:

答案 0 :(得分:1)

首先,你的主要答案是#34;问题是 - 从你的gulp任务中运行电子CMD。

原因是electron-rebuild可以通过gulp内部自己的API直接调用。您无需启动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);
        });
});

IMO,软件包文档对API 订单并不是非常清楚,但是他们按照其选项概述中列出的顺序推断它:https://github.com/electron/electron-rebuild#how-can-i-integrate-this-into-grunt--gulp--whatever

我只使用上面示例中的前3个参数,但据说所有这些参数都有效。在此API的先前版本中,我发现在64位Windows版本的Node中调用的gulp脚本中运行时构建32位Windows可执行文件并不起作用,但我还没有检查是否已修复最新版本。