Grunt任务查杀完成后的服务器

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

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

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

问题是,如果文件是由Grunt编译的,从app.post()内部app.post() ,当Grunt任务完成后,退出我的快递服务器。 我得到了一个“完成,没有错误”的结论,并且结束这个过程。

我使用Grunt.cli运行我的Grunt任务,并将callback传递给我的包装器,因为我的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作为一个subprocess,或以一种方式,它不退出我的服务器, 能够将该callback作为一个参数进入grunt选项?

还是有更好的方法来devise这个?


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

我的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() ? }); };