设为首页 收藏本站
查看: 898|回复: 0

[经验分享] 使用Grunt构建自动化开发环境

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-23 10:56:58 | 显示全部楼层 |阅读模式
  1、准备工作
  1)首页确保电脑上网,以及能够访问https://registry.npmjs.org/,因需从此网站中下载安装相应的插件;
  2)电脑安装Node.js,Grunt及Grunt插件都是基于node.js运行的;如果你电脑上未装node.js,到nodejs官网https://nodejs.org/下载相应版本安装吧;
  3)安装grunt-CLI,要想使用grunt,需要将grunt-CLI安装到全局环境中,使用nodejs的”npm install”进行安装;
  打开控制台(windows系统下使用管理员权限打开),输入:npm install –g grunt-cli,然后敲击回车。
  要检查是否已经安装grunt-cli并生效,只需输入grunt命令,敲击回车,如果出现下图结果,即表示你已成功安装grunt-cli。
DSC0000.png

  2、创建一个简单的测试
  在本机的项目目录中创建GruntTest目录(包括build,src,test,node_modules为安装插件时自动生成),两个文件(Gruntfile.js,package.json,注意第一个文件名首字母大写)。
DSC0001.png

  其中package.json格式如下:



{ "name": "Grunt_test", "version": "0.0.1", "dependencies": {}, "devDependencies": { }}
插件安装之后,package.json如下图所示。
DSC0002.png
  3、安装Grunt
  从控制台中进入到刚才创建的目录中,输入以下命令:npm install grunt --save-dev(注意save前是两个-),其中--save-dev的意思是在安装grunt的同时,把grunt保存为这个目录的开发依赖项。这个依赖项的配置即为package.json中的devDependencies对应的配置。
  grunt安装成功之后,在package.json文件中的devDependencies属性中会自动添加上"grunt": "^0.4.5"。目录中会自动创建node_modules文件夹,其中会有一个grunt的文件夹。
  4、配置Gruntfile.js文件
  首先把Gruntfile.js配置成如下格式:
DSC0003.png




/**
* Created by Jack on 2015-10-19.
*/
//包装函数
module.exports=function(grunt){
grunt.initConfig({
//获取package.json中的信息
pkg:grunt.file.readJSON('package.json'),
//JS文件压缩
uglify:{
options:{
stripBanners:true,
banner:'/* <%=pkg.name%>-<%=pkg.version%>.js <%=grunt.template.today("yyyy-mm-dd")%> */\n'
},
build:{
src:'src/test.js',//原文件路径
dest:'build/js/<%=pkg.name%>-<%=pkg.version%>.min.js'//压缩后文件路径
}
},
//CSS文件压缩
cssmin: {
options: {
shorthandCompacting: false,
roundingPrecision: -1
},
target: {
/*files: {
'output.css': ['foo.css', 'bar.css']//合并两个文件到一个文件
}*/
files: [{
expand: true,
cwd: 'src/',//原文件目录
src: ['*.css', '!*.min.css'],
dest: 'build/css',//压缩后文件目录
ext: '.min.css'
}]
}
},
//JS文件错误提示
jshint:{
build:['Gruntfile.js','src/*.js'],
options:{
jshintrc:'g.jshintrc'
}
},
watch: {
scripts: {
files: ['src/*.js','src/*.css'],
tasks: ['jshint','uglify','cssmin'],
options: {
spawn: false
}
}
}
});
//告诉grunt我们将要加载的插件
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
//告诉grunt当我们在终端中输入grunt时需要做哪些操作(注意先后顺序)
grunt.registerTask('default',['jshint','uglify','cssmin','watch']);
};
  5、Grunt插件安装

  进入grunt官网的插件列表页面 http://www.gruntjs.net/plugins ,我们能看到grunt到目前为止的所有插件。
  插件分为两类。第一类是grunt团队贡献的插件,这些插件的名字前面都带有&#8220;contrib-&#8221;前缀,而且在插件列表中有星号标注。第二类是第三方提供的插件,不带有这两个特征。
Contrib-jshint&#8212;&#8212;javascript语法错误检查;
Contrib-watch&#8212;&#8212;实时监控文件变化、调用相应的任务重新执行;
Contrib-clean&#8212;&#8212;清空文件、文件夹;
Contrib-uglify&#8212;&#8212;压缩javascript代码
Contrib-copy&#8212;&#8212;复制文件、文件夹
Contrib-concat&#8212;&#8212;合并多个文件的代码到一个文件中
karma&#8212;&#8212;前端自动化测试工具
  安装插件命令为:npm install grunt-contrib-uglify --save-dev格式。
  6、使用uglify插件
  Uglify插件的功能就是压缩javascript代码。安装方式:npm install grunt-contrib-uglify --save-dev,安装成功之后package.json文件会自动添加相应配置,node_modules目录中也会创建相应的插件目录。
  使用uglify来压缩javascript代码,首先在src目录中创建一个&#8221;test.js&#8221;
DSC0004.png




/**
* Created by Jack on 2015-10-20.
*/
(function(window,undefined){
function add(a,b){
return a+b;
}
add(10,20);
})(window);
function test(a,b,c){
return a+b*c;
}
  第一步:在Gruntfile.js中进行配置。
DSC0005.png




/**
* Created by Jack on 2015-10-19.
*/
//包装函数
module.exports=function(grunt){
grunt.initConfig({
//获取package.json中的信息
pkg:grunt.file.readJSON('package.json'),
//JS文件压缩
uglify:{
options:{
stripBanners:true,
banner:'/* <%=pkg.name%>-<%=pkg.version%>.js <%=grunt.template.today("yyyy-mm-dd")%> */\n'
},
build:{
src:'src/test.js',//原文件路径
dest:'build/js/<%=pkg.name%>-<%=pkg.version%>.min.js'//压缩后文件路径
}
},
//CSS文件压缩
cssmin: {
options: {
shorthandCompacting: false,
roundingPrecision: -1
},
target: {
/*files: {
'output.css': ['foo.css', 'bar.css']//合并两个文件到一个文件
}*/
files: [{
expand: true,
cwd: 'src/',//原文件目录
src: ['*.css', '!*.min.css'],
dest: 'build/css',//压缩后文件目录
ext: '.min.css'
}]
}
},
//JS文件错误提示
jshint:{
build:['Gruntfile.js','src/*.js'],
options:{
jshintrc:'g.jshintrc'
}
},
watch: {
scripts: {
files: ['src/*.js','src/*.css'],
tasks: ['jshint','uglify','cssmin'],
options: {
spawn: false
}
}
}
});
//告诉grunt我们将要加载的插件
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
//告诉grunt当我们在终端中输入grunt时需要做哪些操作(注意先后顺序)
grunt.registerTask('default',['jshint','uglify','cssmin','watch']);
};

  对uglify的配置有两项:
  &#8220;options&#8221;中规定允许生成的压缩文件带banner,即在生成的压缩文件第一行加一句话说明。注意,其中使用到了pkg获取package.json的内容。
  &#8220;build&#8221;中配置了源文件和目标文件。即规定了要压缩谁?压缩之后会生成谁?注意,我们这里将目标文件的文件名通过pkg的name和version来命名。
  (PS:上文中说过的package.json的内容终于找到了他被应用的地方了。这样的好处是:例如,对文件版本的管理,你只需要在package.json中修改即可,grunt会自动根据最新的版本号生成相应版本的文件。你不用手动去修改文件的文件名。)  第二步:在 grunt.initConfig 方法之后,要让grunt去加载这一个插件。光配置了,不加载上,如何用啊?



grunt.loadNpmTasks('grunt-contrib-uglify');
第三步:在grunt命令执行时,要不要立即执行uglify插件?如果要,就写上,否则不写。我现在是需要的,所以我写上。也有可能不需要,这种情况谁知道呢?


grunt.registerTask('default',['uglify']);
  7、其它插件
  如果使用其它插件,可先进行安装,然后进行配置,加载插件,注册任务插件。具体使用说明可进入http://www.gruntjs.net/plugins网站中点击相应的插件查看相应的配置说明。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346130-1-1.html 上篇帖子: JavaScript 堆内存分析新工具 OneHeap 下篇帖子: 在前后端分离Web项目中,RBAC实现的研究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表