Grunt参考:

http://www.cnblogs.com/yexiaochai/p/3603389.html

http://blog.csdn.net/wangfupeng1988/article/details/46418203/

grunt打包seajs项目http://www.tuicool.com/articles/bEZNZnV

Grunt 实例之 构建 seajs 项目   http://www.tuicool.com/articles/zaUfI3

Gruntfile.js:

module.exports = function (grunt) {
// 项目配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'), //合并
concat: {
options: {
separator: '/*文件分割*/', //合并文件时的分隔符
banner: '/*合并文件 <%= grunt.template.today("yyyy-mm-dd") %>*/', //文件头注释信息,只会出现一次
footer: '/*concat end...*/', //文件尾信息,只会出现一次
stripBanners:"/**/" //去掉源代码注释信息(只会清除/**/这种注释)
},
//写法1:
basic_and_extras: {
files: {
'build/ecnulib.js': 'common/jslib/*.js',
'build/gLib.js': ['common/jslib/gClass.js', 'common/jslib/gConfig.js']
}
} //写法2
// dist: {
// src: 'common/jslib/*.js',
// dest: 'build/ecnulib.js'
// }
}, //压缩混淆
uglify: {
options: {
//注释
banner: '/*!ecnulib.js压缩后 <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
"my_target": {
//写法1
files: [{
expand: true,
cwd: 'common/jslib/',
src: '**/*.js',
dest: 'build'
}]
//写法2
// "files": {
// 'build/ecnulib.min.js': ['common/jslib/gClass.js', 'common/jslib/gConfig.js', 'common/jslib/gMap.js'],
// 'build/index.min.js':['js/index.js']
// }
}
//写法3
// build: {
// src: 'js/index.js',
// dest: 'build/index.min.js'
// }
}, //检查
jshint:{
options: { //相关配置
//jshintrc:'.jshintrc' //在.jshintrc文件里配置jshint的检查规则
//或者直接在options里面逐个配置
curly: true, //循环或者条件语句必须使用花括号包围
eqeqeq: true, //强制使用三等号
latedef: "nofunc", //禁止定义之前使用变量
strict:true //严格模式
},
//写法1
//all:["common/jslib/gConfig.js"] //写法2
// build:['common/jslib/gConfig.js'], //写法3
//合并之前做一次检查,合并之后再做一次检查
// 运行时用grunt jshint:pre jshint:after
pre: ['common/jslib/gClass.js', 'common/jslib/gConfig.js'],
after: ['build/gLib.js'] }, //css压缩
cssmin:{
compress:{
files:{
'build/css/style.min.css':['css/index.css','css/codewin.css']
}
} }, //复制文件
copy:{
main:{
flatten:true,
expand:true,
src:'build/*.js', //将src中的文件复制到dest路径下
dest:'common/' }
}, //require引入文件的打包
requirejs: {
compile: {
"options": {
"baseUrl": "./",
"name": 'src/test02.js',
"paths": {
"$": "src/zepto",
"_": "src/underscore",
"B": "src/backbone",
"Test": "src/Test01"
},
"include": [
"$",
"_",
"B",
"Test"
], //将include中包含的文件压缩打包至out中的路径下
"out": "dest/libs.js"
}
}
}, //监测文件变动
watch:{
build:{ //各个插件的配置时,都是用了“build”这一名称作为一个配置项,这个名词不是必须的,可以用其他字符串替换
files:['common/jslib/*.js','css/*.css'],
tasks:['cat','csmin'],
options:{
spawn:true, //默认true,会创建一个新的子进程来执行触发的任务;通过设置为 false,可以使得触发的任务可以共享进程上下文,并且提高速度。但是,这会导致监控任务容易崩溃,
event:['all'] //可以为 'all', 'changed', 'added' 和 'deleted'.
}
} } }); // 加载提供"uglify"任务的插件
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-watch');
//grunt.loadNpmTasks('grunt-contrib-requirejs'); // 默认任务
grunt.registerTask('ug', ['uglify']);
grunt.registerTask('cat', ['concat']);
grunt.registerTask('jsh',['jshint']);
grunt.registerTask('csmin',['cssmin']);
grunt.registerTask('cpy',['copy']);
grunt.registerTask('wat',['watch']); //自定义任务
//运行 grunt mytask:hello:world
grunt.registerTask('mytask',"this is a custom task",function (arg1,arg2){
grunt.log.writeln("任务名:"+this.name);
grunt.log.writeln("参数:"+arg1+" "+arg2);
}); }

package.json

/*批量安装插件
//在上传代码时,node_modules文件夹中的插件可以不上传,只保留package.json和Gruntfile.js,然后在改目录下,运行“npm install”,即可将所需的插件批量下载下来
//
//将package.json文件移至某目录下,执行“npm install”命令,即可批量下载*/ {
"name": "editor",
"file": "editor",
"version": "0.1.0",
"description": "this is a online editor",
"devDependencies": {
"grunt": "^1.0.1",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-cssmin": "^1.0.1",
"grunt-contrib-jshint": "^1.0.0",
"grunt-contrib-uglify": "^1.0.1",
"grunt-contrib-watch": "^1.0.0"
}
}

Grunt参考的更多相关文章

  1. 前端自动化构建工具Grunt

    一.了解Gurnt(http://www.open-open.com/lib/view/open1433898272036.html) Grunt 是一个基于任务的JavaScript工程命令行构建工 ...

  2. AnguarJS测试的实施步骤整理

    最近开发用到了AngularJS,据说目前大型系统都用这个作为前端.最近参与的一个项目,web部分重度使用了AngularJS,整个前端架构有组织有纪律.所谓的有纪律就是说,有比较完善的测试用例,用上 ...

  3. 管理系统的前端解决方案:Pagurian V1.3发布

    Pagurian 一个管理系统的前端解决方案, 致力于让前端设计,开发,测试,发布更简单. 功能简介 Pagurian 适用于Web管理级的项目 基于Sea.js遵循CMD规范,友好的模块定义,使业务 ...

  4. 【开源.NET】 分享一个前后端分离的轻量级内容管理框架

    开发框架要考虑的面太多了:安全.稳定.性能.效率.扩展.整洁,还要经得起实践的考验,从零开发一个可用的框架,是很耗时费神的工作.网上很多开源的框架,为何还要自己开发?我是基于以下两点: 没找到合适的: ...

  5. npm的安装和使用?

    参考: http://www.cnblogs.com/chyingp/p/npm.html 在css中使用变量, 采用less或sass来编译css 改变网页网站开发和构建的方式, 除了用emmet( ...

  6. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  7. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  8. 应用Grunt自动化地优化你的项目前端

    在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...

  9. Grunt学习使用

    原文地址:Grunt学习使用必看 grunt简介神马的不多说,到处一大堆. 我只说说我已经实现了的代码. 按照官方的教程 相信已经配置好了,接下来说 package.json 和 Gruntfile. ...

随机推荐

  1. 彻底弄懂AngularJS中的transclusion

    点击查看AngularJS系列目录 彻底弄懂AngularJS中的transclusion AngularJS中指令的重要性是不言而喻的,指令让我们可以创建自己的HTML标记,它将自定义元素变成了一个 ...

  2. 实例讲解webpack的基本使用第二篇

    这一篇来讲解一下如何设置webpack的配置文件webpack.config.js 我们新建一个webpack-demo的项目文件夹,然后安装webpack 执行如下命令 在项目文件夹下,建一个dis ...

  3. 从DDD开始说起

    前言 从13年接触DDD之后开始做应用架构已经整整四个年头. 四年里关于DDD的感触良多,慢慢有了一些心得. 关于DDD的介绍已经有很多的文章和书籍,这里我推荐三本最重要的书籍. <领域驱动设计 ...

  4. 偏置-方差分解(Bias-Variance Decomposition)

    本文地址为:http://www.cnblogs.com/kemaswill/,作者联系方式为kemaswill@163.com,转载请注明出处. 机器学习的目标是学得一个泛化能力比较好的模型.所谓泛 ...

  5. NDK各个版本链接

    ndk_r15c (July 2017) Windows 32-bit : https://dl.google.com/android/repository/android-ndk-r15c-wind ...

  6. handlebar JS模板使用笔记

    直接上代码: (定义模板) (编译注入) ***知识点*** //数据必须为Json数据(强调:jsonp数据不行,和json是两种数据,jsonp多了callback回调函数来包裹json数据) 遍 ...

  7. VB.NET 打开窗体后关闭自己

    第一:要实例化打开的窗体 Dim bb As New frm_Main 第二:打开窗体 show 第三:释放自身 Finalize()   '赋值另一窗体的控件值,先实例化,再进行操作 Dim bb ...

  8. 全方位解读及介绍windows网络安全及常见攻击方式

    本来我就是来逛逛论坛的,可是看到前面有位一样是干网络安全的同行,留下来过的痕迹,发了一篇相对不错的文章,我寻思咱既然来这一趟,也不能显得就比别人差啊.所以我也就写了这一片不算成熟小文章,望各位共勉之哈 ...

  9. java 学习笔记 读取配置文件的三种方式

    package com.itheima.servlet.cfg; import java.io.FileInputStream; import java.io.FileNotFoundExceptio ...

  10. Struts2 03---数据封装+获取表单提交数据

        Struts的数据封装分为三种:属性封装,模型驱动,表达式封装.下面以获取表单提交数据来简单介绍一下Struts的数据封装. <form action="loginlogin. ...