Concat和Minify节点中的JS文件
NodeJS中是否有模块连接和缩小JavaScript文件?
如果您使用的是Connect,那么Connect-Assetmanager的运气就不错了
我build议使用UglifyJS ,它是NodeJS的JavaScriptparsing器/压缩器/压缩器/美化器库。
如果您对自动化工具感兴趣,而不是简单地连接和缩小文件,则有以下解决scheme:
-
GruntJS是一个用于JavaScript项目的基于任务的命令行构build工具。 当前版本有以下内置任务:
- concat – 连接文件。
- init – 从预定义的模板生成项目脚手架。
- lint – 用JSHintvalidation文件。
- min – 使用UglifyJS对文件进行最小化。
- qunit – 在无头PhantomJS实例中运行QUnitunit testing。
- 服务器 – 启动一个静态的Web服务器。
除此之外,还有很多插件可用。
-
Gulp是一个工具包,可以帮助您在开发工作stream程中自动执行痛苦或耗时的任务。 对于Web开发(如果这是你的事情),它可以帮助你做CSS预处理,JS转运,缩小,实时重新加载,等等。 所有主要的IDE都集成了集成function,人们都热衷于PHP,.NET,Node.js,Java等等。 拥有超过1700个插件(还有很多你可以不需要插件),让你放弃构build系统,重新开始工作。
-
Yeoman是一套function强大而又有见地的工具,库和工作stream程,可帮助开发人员快速构build漂亮,引人注目的Web应用程序。
- 避雷脚手架 – 轻松搭build可自定义模板的新项目(例如HTML5 Boilerplate , Twitter Bootstrap ),AMD(通过RequireJS )等等。
- 自动编译CoffeeScript和Compass – 我们的LiveReload监视过程会自动编译源文件并在您做出更改时刷新浏览器,因此您无需执行此操作。
- 自动提示您的脚本 – 所有的脚本都会自动运行jshint,以确保它们遵循语言最佳实践。
- 内置预览服务器 – 不必再启动自己的HTTP服务器。 我的内置的一个可以用一个命令来解雇。
- 真棒图像优化 – 我使用OptiPNG和JPEGTran优化所有的图像,以便您的用户可以花更less的时间下载资源和更多的时间使用您的应用程序。
- AppCache清单生成 – 我为您生成您的应用程序caching清单。 只是build立一个项目和繁荣。 你会免费得到它。
- 杀手构build过程 – 不仅可以缩小和拼接, 我还优化了所有的图像文件,HTML,编译你的CoffeeScript和Compass文件,生成一个应用程序caching清单,如果你使用的是AMD,我们将通过r.js传递这些模块,所以你不需要。
- 集成包pipe理 – 需要依赖? 这只是一个按键。 我允许你轻松地通过命令行(例如,yeomansearchjquery )search新包,安装它们并保持更新,而无需打开浏览器。
- 支持ES6模块语法 – 尝试使用最新的ECMAScript 6模块语法编写模块。 这是一个实验性function,可以转换回ES5,因此您可以在所有现代浏览器中使用该代码。
- PhantomJSunit testing – 轻松通过PhantomJS在无头WebKit中运行unit testing。 当你创build一个新的应用程序,我还包括一些testing脚手架为您的应用程序。
UglifyJS是一个节点模块,是关于缩小JavaScript的。 我不认为它也join文件,但可能有一个选项,我错过了。
编辑:与UglifyJS 2 ,它也build立了连接。
如果你想在你的节点应用程序中这样做,这很容易。 这允许您在运行时dynamic生成缩小/连接的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'); } });
你会更好地使用gulp / webpack来连接/组织/捆绑您的资产。
为了joinjs文件,你可以像在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之后的评论中所提到的,你也可以这样做:
uglifyjs --compress --mangle -- input.js
如果你喜欢Rails 3.1资产pipe道的方法,你应该尝试我的连接资产库。
尝试这两个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
然后创build你的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']); }
最后,在terminal中inputgrunt
,Grunt将开始观察JavaScript文件的变化,并自动对其进行concat和uglify(每当你将变更保存在../src/
我肯定会build议Closure编译器的简单模式。
也许不完全是你在找什么,但Enderjs可以工作。