以编程方式在内存中缩小Javascript

His*_*ako 4 javascript minify node.js coffeescript express

我正在为express.js应用程序构建一个漂亮的小"资产管道",但我对javascript文件的压缩步骤有问题

scripts = (fs.readFileSync(file) for file in filelist)
result = scripts.join("\n\n") # concat
Run Code Online (Sandbox Code Playgroud)

到目前为止,事情正在按预期工作(逻辑本身是用coffeescript编写的).合并JS文件后的下一步是缩小它们.但这是我的问题:当我在生产模式中启动我的快速应用程序时,我希望在我编写的连接中间件中执行此操作.

我需要一个解决方案,可以缩小给定blob的javascript内容,而不将结果写入磁盘(!),换句话说:一个函数执行缩小并直接返回结果作为结果值.(不,也没有web服务.)它应该像这样使用:

minified_result = awesomeMinifyFunction( result )
Run Code Online (Sandbox Code Playgroud)

原始的处理性能是不是对我很重要,无论是压缩的水平,我需要的只是一些没有麻烦以这种方式工作.

有谁知道合适的解决方案?提前致谢!

Wir*_*rie 7

我建议你看看一个基于JavaScript的缩小器,比如UglifyJS2.

npm install uglify-js
Run Code Online (Sandbox Code Playgroud)

它可以以编程方式在Node.JS应用程序中使用:

var UglifyJS = require("uglify-js");
// you could pass multiple files (rather than reading them as strings)
var result = UglifyJS.minify([ "file1.js", "file2.js", "file3.js" ]);
console.log(result.code);
Run Code Online (Sandbox Code Playgroud)

或者你可以

var result = scripts.join("\n\n");  # concat
result = UglifyJS.minify(result, {fromString: true});
console.log(result.code);
Run Code Online (Sandbox Code Playgroud)