这两天公司让研究js压缩,去掉js中的备注和空格,网上看了一些技术方案,都须要js代码合并,而咱们并不想把js代码合并成一个js。因此就看到了grunt的配置压缩,下面咱们直接来看过程吧。前端
Grunt是前端的Mavan,它是JavaScript世界的内置工具。简而言之,就是运行在Node.js上面的任务管理器(task runner),其能够在任何语言和项目中自动化指定的任务。咱们可经过npm来安装Grunt和Grunt插件。node
Grunt 生态系统很是庞大,而且一直在增加。因为拥有数量庞大的插件可供选择,所以,你能够利用 Grunt 自动完成任何事,而且花费最少的代价。对于须要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具能够减轻你的劳动,简化你的工做,好比:npm
Minification Compilation Unit testing Linting and more
为了要使用Grunt,须要全局安装Grunt的命令行接口CLI(Command Line Interface)。若是是在Linux、mac上运行,须要用管理员权限运行命令窗口或是使用sudo。json
npm install -g grunt-cli
一个基本的Nodejs项目,根目录包含package.json文件,如:grunt
{ "name": "my-project-name", "version": "0.1.0", "devDependencies": { "grunt": "~0.4.5", "grunt-contrib-jshint": "~0.10.0", "grunt-contrib-nodeunit": "~0.4.1", "grunt-contrib-uglify": "~0.5.0" } }
接下来运行 npm i工具
或者经过如下命令安装单元测试
// --save-dev 意思是将依赖放入devDependencies中 npm install grunt --save-dev npm install grunt-contrib-jshint --save-dev npm install grunt-contrib-nodeunit --save-dev npm install grunt-contrib-nodeunit --save-dev
在项目根目录中建立Gruntfile.js,示列如:测试
module.exports = function(grunt) { // Grunt配置 grunt.initConfig({ //获取package配置 pkg: grunt.file.readJSON('package.json'), uglify: { options: { // 配置日志输入标识 banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, build: { // 配置源文件目录 src: 'src/<%= pkg.name %>.js', // 压缩后目标目录 dest: 'build/<%= pkg.name %>.min.js' } } }); // 加载js压缩插件 grunt.loadNpmTasks('grunt-contrib-uglify'); // 注册默认执行任务 grunt.registerTask('default', ['uglify']); };
根目录打开命令窗口,运行以下命令ui
grunt
执行后的效果就是讲src目录里的js文件压缩输出到dest目录中编码
不少状况下,咱们在编码的时候,但愿能够自动将更改部署到目标目录。这时候咱们可使用:
npm i grunt-contrib-watch --save-dev
修改Gruntfile.js
module.exports = function(grunt) { // Grunt配置 grunt.initConfig({ //获取package配置 pkg: grunt.file.readJSON('package.json'), uglify: { options: { // 配置日志输入标识 banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, build: { // 配置源文件目录 src: 'src/<%= pkg.name %>.js', // 压缩后目标目录 dest: 'build/<%= pkg.name %>.min.js' } }, //监视 watch: { scripts: { //监听目录src下的全部js文件 files: ['src/*.js'], //只要文件有变更就执行uglify任务 tasks: ['uglify'], options: { spawn: false, }, } } }); // 加载js压缩插件 grunt.loadNpmTasks('grunt-contrib-uglify'); // 注册默认执行任务 grunt.registerTask('default', ['uglify','watch']); };