自动化NPM和亭子与咕噜安装(Automate npm and bower install with

2019-08-05 16:09发布

我有一个使用新公共管理后台依赖管理和亭子的前端依赖管理节点/角项目。 我想用一个咕噜做任务都安装命令。 我一直无法弄清楚如何做到这一点。

我做了使用尝试exec ,但它实际上并没有安装任何东西。

module.exports = function(grunt) {

    grunt.registerTask('install', 'install the backend and frontend dependencies', function() {
        // adapted from http://www.dzone.com/snippets/execute-unix-command-nodejs
        var exec = require('child_process').exec,
            sys  = require('sys');

        function puts(error, stdout, stderr) { console.log(stdout); sys.puts(stdout) }

        // assuming this command is run from the root of the repo
        exec('bower install', {cwd: './frontend'}, puts);
    });

};

当我cd到前端,开拓node ,并从控制台运行这段代码,这工作正常。 我在做什么错在繁重的任务吗?

(我也尝试使用凉亭和故宫的API,但不能使这项工作无论是。)

Answer 1:

你需要告诉您使用异步方法(咕噜.exec )通过调用this.async()方法,得到一个回调,并调用,当EXEC完成。

这应该工作:

module.exports = function(grunt) {
    grunt.registerTask('install', 'install the backend and frontend dependencies', function() {
        var exec = require('child_process').exec;
        var cb = this.async();
        exec('bower install', {cwd: './frontend'}, function(err, stdout, stderr) {
            console.log(stdout);
            cb();
        });
    });
};

看看为什么我的异步任务完成?



Answer 2:

要安装在客户端组件npm install在同一时间比服务器端库,你可以在你添加package.json

"dependencies": {
    ...
    "bower" : ""
},
"scripts": {
    ...
    "postinstall" : "bower install"
}

我宁愿让安装和测试/构建之间的区别



Answer 3:

仅供参考,这里是我的现在。

你也可以采取这个问题的另一种方式,即让NPM处理凉亭的执行,最终让咕噜手柄NPM。 请参阅使用女郎用的Heroku 。

grunt.registerTask('install', 'install the backend and frontend dependencies', function() {
    var async = require('async');
    var exec = require('child_process').exec;
    var done = this.async();

    var runCmd = function(item, callback) {
        process.stdout.write('running "' + item + '"...\n');
        var cmd = exec(item);
        cmd.stdout.on('data', function (data) {
            grunt.log.writeln(data);
        });
        cmd.stderr.on('data', function (data) {
            grunt.log.errorlns(data);
        });
        cmd.on('exit', function (code) {
            if (code !== 0) throw new Error(item + ' failed');
            grunt.log.writeln('done\n');
            callback();
        });
    };

    async.series({
        npm: function(callback){
            runCmd('npm install', callback);
        },
        bower: function(callback){
            runCmd('bower install', callback);  
        }
    },
    function(err, results) {
        if (err) done(false);
        done();
    });
});


Answer 4:

步兵的任务,不只是这份工作(按照上面的Sindre的解决方案):

https://github.com/ahutchings/grunt-install-dependencies



Answer 5:

咕噜任务,它的凉亭安装命令: https://github.com/yatskevich/grunt-bower-task

此外,您还可以使用https://github.com/stephenplusplus/grunt-bower-install

自动注入你的依赖复制到index.html文件



文章来源: Automate npm and bower install with grunt