【发布时间】:2011-09-26 06:12:57
【问题描述】:
NodeJS 中是否有任何模块可以连接和缩小 JavaScript 文件?
【问题讨论】:
标签: javascript node.js minify
NodeJS 中是否有任何模块可以连接和缩小 JavaScript 文件?
【问题讨论】:
标签: javascript node.js minify
也许不是您想要的,但Enderjs 可以工作。
【讨论】:
UglifyJS 是一个关于缩小 javascript 的 Node 模块。我不认为它也加入文件,但我可能错过了一个选项。
编辑: 使用UglifyJS 2,它还内置了串联。
如果您想在您的节点应用程序中内联执行此操作,那真的很容易。这允许您在运行时动态生成缩小/连接的 js 脚本,而无需使用 grunt 或 yeoman 方式。
npm install uglify-js
在你的模块中:
var fs = require('fs');
var uglify = require("uglify-js");
var uglified = uglify.minify(['file1.js', 'file2.js', 'file3.js']);
fs.writeFile('concat.min.js', uglified.code, function (err){
if(err) {
console.log(err);
} else {
console.log("Script generated and saved:", 'concat.min.js');
}
});
【讨论】:
如果您使用的是 Connect,那么我在 Connect-Assetmanager 上运气不错
【讨论】:
我肯定会推荐 Closure Compiler 的简单模式。
【讨论】:
如果您喜欢 Rails 3.1 资产管道方法,您应该试试我的 connect-assets 库。
【讨论】:
您最好使用 gulp / webpack 之类的东西来合并/组织/捆绑您的资产。
为了加入 js 文件,你可以像在 twitter bootstrap makefile 中那样做
cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js > docs/assets/js/bootstrap.js
这只是文件的串联,输出到 js 文件
然后你可以安装uglify-js来缩小js:
npm -g install uglify-js
并使用您的 path/file.js ofc 执行此命令:
uglifyjs docs/assets/js/bootstrap.js -nc > docs/assets/js/bootstrap.min.js
正如自 uglifyjs 2 以来的 cmets 中所述,您也可以这样做:
uglifyjs --compress --mangle -- input.js
【讨论】:
uglifyjs --compress --mangle -- input.js
ERROR: Unexpected token: keyword «const»,这是我没想到的!建议是先把它说出来,但这违背了目的,看起来像是倒退了一步。现在正在寻找一个简单的无依赖 npm-installable minifier...
我推荐使用UglifyJS,它是一个用于 NodeJS 的 JavaScript 解析器 / 处理器 / 压缩器 / 美化器库。
如果您对不仅仅是连接和缩小文件的自动化工具感兴趣,可以使用以下解决方案:
GruntJS 是用于 JavaScript 项目的基于任务的命令行构建工具。当前版本具有以下内置任务:
除了这些任务之外,还有很多 plugins 可用。
Gulp 是一个工具包,可帮助您在开发工作流程中自动执行痛苦或耗时的任务。对于 web 开发(如果那是你的事),它可以通过 CSS 预处理、JS 转译、缩小、实时重新加载等等来帮助你。所有主要的 IDE 都内置了集成,人们喜欢跨 PHP、.NET、Node.js、Java 等的 gulp。拥有超过 1700 个插件(并且您可以在没有插件的情况下做很多事情),gulp 让您不再纠结于构建系统并重新开始工作。
Yeoman 是一套强大且自以为是的工具、库和工作流程,可帮助开发人员快速构建美观、引人注目的网络应用程序。
【讨论】:
试试这两个 Grunt 插件
https://www.npmjs.org/package/grunt-contrib-concat
https://www.npmjs.org/package/grunt-contrib-uglify
你可以像这样安装你需要的一切:
npm install grunt
npm install grunt-cli
npm install grunt-contrib-concat
npm install grunt-contrib-uglify
然后创建你的 grunt 文件,如下所示:
Gruntfile.js
module.exports = function(grunt){
grunt.initConfig({
concat: {
options: {
process: function(src, path){
return '\n/* Source: ' + path + ' */\n' + src;
}
},
src: [
'../src/**/*.js'
],
dest: '../bin/app-debug.js'
},
uglify: {
src: '../bin/app-debug.js',
dest: '../bin/app.js'
},
watch: {
options: {
atBegin: true,
event: ['all']
},
src: {
files: '../src/**/*.js',
tasks: ['concat']
},
dist: {
files: '../bin/app-debug.js',
tasks: ['uglify']
},
}
}
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ['watch']);
}
最后,在终端中输入grunt,Grunt 将开始观察你的 JavaScript 文件是否有变化,并自动连接和丑化它们(每当你在 ../src/ 中保存对 js 文件的更改时)
【讨论】:
如果您已经拥有uglify-js,您的代码使用了一些最新的ES6 features (ECMAScript 2015),它只会在第一次运行时返回解析错误,然后安装uglify-es :
npm install uglify-es -g
或者:
npm install mishoo/UglifyJS2#harmony
这是一个临时包,包含 uglifyjs (UglifyJS2) 的 'harmony' branch 的最新版本。
您仍然可以使用uglifyjs 命令正常运行它。压缩和破坏示例:
uglifyjs -c -m -o js/es6stuff.js -- js/es6stuff/*.js
这将生成一个包含文件夹中所有 JS 文件的单个文件。双破折号 (--) 只是防止输入文件被用作选项参数。
【讨论】: