Javascript Grunt任务完成后终止服务器

Javascript Grunt任务完成后终止服务器,javascript,node.js,express,gruntjs,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在其中编译一个文件,然后作为下载返回给用户

如果我已经有一个静态文件,我可以做:

app.post('/', function(req, res){
    var pkgFile = __dirname + '/myfile.js';
    var filestream = fs.createReadStream(pkgFile);
    filestream.pipe(res);
});
问题是,如果文件是由Grunt编译的,从
app.post()内部调用,当Grunt任务完成时,它会退出我的express服务器。我得到一个消息“完成,没有错误”,然后进程退出

我正在使用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>作为下载提供给用户

“严格使用”;
module.exports=函数(grunt){
要求('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');
功能项目路径(项目、版本){
var versions=require('./package.json').\u projects[project\].versions;
if(!~versions.indexOf(version_41;))version_41;=versions.filter(函数(ver){

return ver.slice(0,-2)这是Grunt.Gulp的工作方式,无需磁盘流。您正在处理的文件是什么类型的?请问您的GrunFile是什么?@Vinz243已更新。(阅读后将删除此注释)@羊皮纸更新。基本上是将不同的文件从一个库编译成1.js file>uglifying it>,作为下载提供给用户。
"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() ?
    });
};