我是靠谱客的博主 苹果悟空,最近开发中收集的这篇文章主要介绍Grunt前端打包工具实例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

曾经的项目中接到过使用Grunt前端打包工具实现对js、css压缩混淆,对新增或者修改的js、css加版本号,并在引入了js、css的jsp中修改版本号的任务。时间比较久远,现在的Vue项目都是使用nodejs进行打包。毕竟当时废了一番功夫,记录一下。

首先列出使用的包有哪些:

{
"devDependencies": {
"grunt": "^0.4.1",
"grunt-contrib-clean": "^1.0.0",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-cssmin": "^1.0.2",
"grunt-contrib-nodeunit": "^1.0.0",
"grunt-contrib-uglify": "^2.0.0",
"grunt-debug": "0.0.3",
"grunt-diff": "^0.1.5",
"grunt-filerev": "^2.3.1",
"grunt-text-replace": "^0.4.0",
"grunt-usemin": "^3.1.1"
},
"dependencies": {
"grunt-changes": "^0.1.2",
"grunt-clean": "^0.4.0"
}
}

然后看一下使用这些包的顺序和步骤:

grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-filerev');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-usemin');
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks('grunt-changes');
grunt.loadNpmTasks('grunt-diff');
// 默认被执行的任务列表。
grunt.registerTask('default', ['clean:upload_release','useminPrepare:release','uglify:release',
'cssmin:release','copy:release','replace:release','filerev:release','usemin','changes:release',
'diff:release']);

1、使用grunt-contrib-clean来清空目标输出文件夹。

2、使用grunt-usemin的useminPrepare模块对输出文件夹的jsp文件进行扫描监控。

3、使用grunt-contrib-uglify压缩混淆js。

4、使用grunt-contrib-cssmin压缩css。

5、使用grunt-contrib-copy把处理过的js、css复制到目标输出文件夹。

6、使用grunt-text-replace把jsp中的指定字符替换成其他字符。

7、使用grunt-filerev来获取css和js的hash值,来知道哪些文件有改变。

8、使用grunt-usemin替换jsp中引入的js、css版本。

9、使用grunt-changes把改动过的jsp输出的目标文件夹。

10、使用grunt-diff把改动的jsp的hash更新到hash.json文件中,以便下一次打包时的比较。

整个过程就是这样的,下面看看具体每个包是怎么使用的。

第一步clean:

clean: {
release: {
src: ["dist/release/*"]
}
}

就是清空dist/release下的所有文件。

第二步useminPrepare:


useminPrepare: {
release: 'dist/release/WebContent/website/**/*.jsp'
},

告诉usemin需要监控的文件,这里是dist/release/WebContent/website下所有jsp后缀的文件。

第三步uglify:


uglify : {
release : {
options : {
mangle : true, //混淆变量名
preserveComments : 'some' //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
},
files : [{
expand : true,
cwd : 'WebContent/website/js', //js目录下
src : ['**/*.js','!jslib/**/*.js'], //所有js文件
dest : 'dist/release/WebContent/website/js' //输出到此目录下
}]
}
}

注释写的很清楚,就不细说了。功能就是对js进行混淆压缩。

第四步cssmin:


cssmin : {
//文件头部输出信息
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd HH:MM:ss") %> */n',
//美化代码
beautify: {
//中文ascii化,非常有用!防止中文乱码的神配置
ascii_only: true
}
},
release : {
files : [{
expand: true,
//相对路径
cwd: 'WebContent/website/css/',//css目录下
src: '*.css',//所有css后缀文件
dest: 'dist/release/WebContent/website/css/'//目标输出目录
}]
}
},

对css进行压缩。

第五步copy:

copy: {
release: {
files: [
{src: ['WebContent/**/*','!node_modules/**','!dist/**','!*.bat','!*.json','!**/*.js',
'!**/*.css'], dest: 'dist/release/', filter: 'isFile'},
{src: ['WebContent/website/js/jslib/**/*'], dest: 'dist/release/', filter: 'isFile'}
]
}
},

这里是把src里的文件转移到dest目标文件下,路径加!感叹号代表忽略。

第六步replace:


replace: {
release: {
src: ['dist/release/WebContent/website/**/*.jsp'],
// 源文件路径
overwrite:true,
// 覆盖
replacements: [{
from: '${base}/website',
// 被替换字符串
to: ''
//替换成的字符串
}]
}
},

把jsp文件中的‘${base}/website’替换成空字符串,项目需要。

第七步filerev:


filerev: {
release:{
src:['dist/release/WebContent/website/js/**/*.js','dist/release/WebContent/website/css/*.css'],
}
},

获取js和css的hash值。

第八步usemin:


usemin: {
options: {
assetsDirs: [
'dist/release/WebContent/website'
],
},
html: ['dist/release/WebContent/website/**/*.jsp']
},

根据hash值来更新jsp中引入的css、js版本

第九步changes:


changes: {
release: {
options: {
hashmap: '.hash'
},
files: [{
expand: true,
cwd: 'dist/release/WebContent/website',
src: ['**/*.jsp'],
dest: 'upload/release/WebContent/website'
}]
}
},

把所有改动的jsp放到upload文件夹下。

第十步diff:


diff : {
release : {
src
: [ 'dist/release/WebContent/**/*.jsp' ],
tasks : [
],
}
},

更新所有jsp的hash值。

要说明的是,这里有三个文件夹,WebContent、dist和upload,WebContent就是需要打包的文件夹,dist算是中间比对文件夹,upload是最后要上传的目标文件夹。dist的作用就是留着上个版本的upload,以便这次打包时来进行比对。

由于npm install下载的包不能完全满足需求,还对源码进行了一些修改,这里就不赘述了,需要的同学可以留下邮箱,看到后会发。

最后

以上就是苹果悟空为你收集整理的Grunt前端打包工具实例的全部内容,希望文章能够帮你解决Grunt前端打包工具实例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部