完成后Grunt任务查杀服务器

时间:2014-09-19 19:48:01

标签: javascript node.js express gruntjs

我正在构建一个应用程序,其中Grunt编译一个文件,作为下载返回给用户。

如果我已有静态文件,我可以这样做:

app.post('/', function(req, res){
    var pkgFile = __dirname + '/myfile.js';
    var filestream = fs.createReadStream(pkgFile);
    filestream.pipe(res);
});

问题是如果文件是由Grunt编译的,从app.post()内部调用,当Grunt任务完成时,它会退出我的快速服务器。我得到一个混乱"完成,没有错误"并且过程退出。

我正在使用Grunt.cli运行我的Grunt任务并将回调传递给我的打包程序,因为我的Grunt任务返回数据,没有写入文件。

grunt.cli({
    gruntfile: __dirname + "/../gruntfile.js",
    modules: modules,
    strip: !compat,
    releaseVersion: version,
    project: project,
    noCoreDependencies: !addCoreDependencies,
    callback: stream
});

function stream (data) {
    var filename = ['MooTools-', project, '-', version, (compat ? '-compat' : '') + (minified ? '-compressed' : ''), '.js'].join('');
    if (minified) data = uglify(data);

    res.setHeader('Content-Type', 'application/javascript');
    res.setHeader('Content-disposition', 'attachment; filename=' + filename);
    res.write(data, 'binary');
    res.end();
}

这样一切都可以一次,然后我必须重新启动服务器......

有没有办法可以将Grunt.cli作为子进程运行,或者以不退出服务器的方式运行,能够将该回调作为参数放入grunt选项?

或者有更好的方法来设计它吗?


我正在做的是将库中的不同文件编译成一个.js文件> uglifying it>提供下载给用户。

My Gruntfile:

"use strict";

module.exports = function(grunt) {

    require('load-grunt-tasks')(grunt);

    var cb = grunt.option('callback'),
        strip = grunt.option('strip'),
        version = grunt.option('releaseVersion'),
        modules = grunt.option('modules'),
        project = grunt.option('project'),
        noCoreDependencies = grunt.option('noCoreDependencies');

    function projectPath(project_, version_){
        var versions = require('./package.json')._projects[project_].versions;
        if (!~versions.indexOf(version_)) version_ = versions.filter(function(ver){
            return ver.slice(0, -2) <= version_.slice(0, -2); 
        })[0];
        return 'cache/' + project_.toLowerCase() + '/docs/' + project_.toLowerCase() + '-' + version + '/Source/';
    }

    var packagerOptions = {
        options: {
            name: {
                Core: projectPath('core', version),
                More: projectPath('more', version)
            },
            callback: cb,
            noOutput: true,
            ignoreYAMLheader: noCoreDependencies
        },
        customBuild: {
            src: [projectPath('core', version) + '**/*.js', projectPath('more', version) + '**/*.js'],
            dest: 'mootools-rocks!.js'
        }
    }

    if (modules.length) packagerOptions.options.only = modules;
    if (strip) packagerOptions.options.strip = ['.*compat'];

    grunt.initConfig({
        'packager': packagerOptions
    });

    grunt.registerTask('default', 'build file and don\'t exit', function(){
        grunt.task.run(['packager:customBuild']);
        // how to prevent process.exit() ?
    });
};

0 个答案:

没有答案