对于 现在的 vue 、 react 、webpack 来说也许有点旧了,有时候,越简单的技术越可靠,备份一下

  1. module.exports = function(grunt) {
  2.  
  3. // Project configuration.
  4. grunt.initConfig({
  5. pkg: grunt.file.readJSON('package.json'),
  6.  
  7. compass: {
  8. development: {
  9. options: {
  10. generatedImagesDir:'public/src/slice',//合并后的雪碧图dir
  11. imagesDir:'public/src/slice', //雪碧图合并前图片碎片dir
  12. sassDir: 'public/src/sass',
  13. cssDir: 'public/src/sass-css',
  14. outputStyle:'compressed',//CSS output mode. Can be: nested, expanded, compact, compressed.
  15. force:false
  16. }
  17. }
  18. },
  19.  
  20. sprite: {
  21. options: {
  22. // sprite背景图源文件夹,只有匹配此路径才会处理,默认 images/slice/
  23. imagepath: 'public/src/slice/',
  24. // 雪碧图输出目录,注意,会覆盖之前文件!默认 images/
  25. spritedest: 'public/src/css/',
  26. // 替换后的背景路径,默认 ../images/
  27. spritepath: 'img/',
  28. // 各图片间间距,如果设置为奇数,会强制+1以保证生成的2x图片为偶数宽高,默认 0
  29. padding: 2,
  30. // 是否以时间戳为文件名生成新的雪碧图文件,如果启用请注意清理之前生成的文件,默认不生成新文件
  31. newsprite: false,
  32. // 版本号 ver 未设置时,是否给雪碧图追加时间戳,默认不追加
  33. spritestamp: true,
  34. // 在CSS文件末尾追加时间戳,默认不追加
  35. cssstamp: false,
  36. // 默认使用二叉树最优排列算法
  37. algorithm: 'binary-tree',
  38. // 默认使用`pngsmith`图像处理引擎
  39. engine: 'pngsmith',
  40.  
  41. //版本号
  42. ver:new Date().toISOString().replace(/\D/g,'')
  43. },
  44. autoSprite: {
  45. files: [{
  46. expand: true,
  47. cwd: 'public/src/sass-css/',
  48. src: '**/*.css',
  49. dest: 'public/src/css/',
  50. ext: '.css'
  51. }]
  52. }
  53. },
  54.  
  55. imagemin: {
  56. dynamic: {
  57. options: {
  58. optimizationLevel: 3 // png图片优化水平,3是默认值,取值区间0-7
  59. },
  60. files: [
  61. {
  62. expand: true,
  63. cwd: "public/src/css/img/", //只压缩 sprite产生的合并图片
  64. src: "**/*.png",
  65. dest: "public/src/css/img/"
  66. }
  67. ]
  68. }
  69. },
  70.  
  71. clean: {
  72. sassCss:{
  73. src:["public/src/sass-css/*"]
  74. },
  75. css: {
  76. src: ['public/src/css/*']
  77. },
  78. js:{
  79. src:['public/dist/js/*']
  80. }
  81. },
  82. copy: {
  83. font: {
  84. expand: true,
  85. cwd: 'public/src/font',
  86. src: '**',
  87. dest: 'public/font'
  88. },
  89. css: {
  90. expand: true,
  91. cwd: 'public/src/css/',
  92. src: '**',
  93. dest: 'public/dist/css/'
  94. }
  95. },
  96.  
  97. babel: {
  98. options: {
  99. presets: ['env'],//the same as latest,including es2015,es2016,es2017 plugins
  100. plugins: ["transform-es2015-modules-amd"],//import file translate to amd module
  101. sourceMap: true
  102. },
  103. files: {
  104. expand: true,
  105. cwd: 'public/src/babel/es6/', //just a test now
  106. src: ['**/*.js'],
  107. dest: 'public/src/babel/es5/'
  108. }
  109. },
  110.  
  111. uglify: {
  112. options: {
  113. banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
  114. sourceMap: true,
  115. mangle: false, //不混淆变量名
  116. comments: 'some' //保留 @preserve @license @cc_on等注释
  117. },
  118. build: {
  119. files:[{
  120. expand: true,
  121. cwd: 'public/src/js',
  122. src: '**/*.js',
  123. dest: 'public/dist/js',
  124. ext: '.js',
  125. extDot: 'last'
  126. }]
  127. }
  128. },
  129.  
  130. requirejs: {
  131. build: {
  132. options : {
  133. optimize:'none', //指定压缩工具,none 不压缩
  134. baseUrl : 'public/dist/js',//在压缩后的模块上进行文件合并
  135. mainConfigFile: 'public/dist/js/require.config.js',
  136. dir:"public/dist/js",//输出文件夹
  137. keepBuildDir:true,//构建过程中勿删除重建dir文件夹
  138. allowSourceOverwrites:true,//dir文件夹与源文件夹相同时允许重写构建前的文件
  139. removeCombined: false,
  140. findNestedDependencies:false,
  141. optimizeCss:'none',
  142. modules:[
  143. {
  144. /******
  145. 该合并后的模块几乎在每个页面都使用到,将作为公用模块,请确保该模块先于页面js文件引入,避免重复加载已合并的文件,
  146. 由于requirejs模块默认加载没有顺序,该模块置入 views/component/foot.ejs,少数未引用foot的页面请单独处理,
  147. page/head.js 不是使用 require 的模块或其依赖引入,请声明为具名模块(define("page/head",[xxx,xxx],function(){}))以避免开发模式下模块未合并时报错
  148. *********/
  149. name:"page/head",
  150. create: false
  151. },
  152. {
  153. name:'ui/ui',
  154. include:["ui/ux","ui/ejs","ui/tpl"],
  155. exclude:["jquery","pin","request"],
  156. create: false
  157. },
  158. {
  159. name:'highstock',
  160. include:["raphael","chart/maps/chinaMap"],
  161. exclude:["jquery"],
  162. create: false
  163. },
  164. {
  165. name:"common/common",
  166. include:["jquery","pin","request","common/common","common/gapageview"],
  167. excludeShallow:["ui/ux","ui/ejs","ui/tpl"],
  168. create: false
  169. },
  170. {
  171. name:'page/analyze/analyze_report',
  172. include:['page/analyze/report/step1','page/analyze/report/step2Major','page/analyze/report/step2Sch'],
  173. exclude:["jquery","pin","request","ui/ux","ui/ejs","ui/tpl","common/common","page/head"],
  174. create: false
  175. },
  176. {
  177. name:'page/zhiyuan/zhiyuan',
  178. include:["page/zhiyuan/list/selectArea","widget/page","common/fixBottom"],
  179. exclude:["jquery","pin","request","ui/ux","ui/ejs","ui/tpl","common/common","page/head"],
  180. create: false
  181. }
  182. ]
  183. }
  184. }
  185. },
  186.  
  187. watch: {
  188. options: {
  189. spawn:true,
  190. interrupt:true,
  191. debounceDelay: 250
  192. },
  193. sass:{
  194. files: 'public/src/sass/**/*.scss',
  195. tasks: [/*"clean:sassCss",*/"clean:css","compass","sprite"]
  196. },
  197. babel:{
  198. files:'public/src/babel/es6/**/*.js',
  199. tasks:['babel']
  200. }
  201. }
  202.  
  203. });
  204.  
  205. // 加载任务的插件
  206. //css
  207. //node-compass requires compass and ruby gem , install ruby then install compass via gem
  208. grunt.loadNpmTasks('grunt-contrib-compass');
  209. grunt.loadNpmTasks('grunt-contrib-cssprite');
  210. grunt.loadNpmTasks('grunt-contrib-imagemin');
  211. grunt.loadNpmTasks('grunt-contrib-clean');
  212. grunt.loadNpmTasks('grunt-contrib-copy');
  213.  
  214. //js
  215. grunt.loadNpmTasks('grunt-babel');
  216. grunt.loadNpmTasks('grunt-contrib-uglify');
  217. grunt.loadNpmTasks('grunt-contrib-requirejs');
  218.  
  219. //watch
  220. grunt.loadNpmTasks('grunt-contrib-watch');
  221.  
  222. //开发期的编译任务
  223. grunt.registerTask('default', [
  224. "clean:sassCss",
  225. "clean:css",
  226. "compass",
  227. "sprite",
  228. "babel"
  229. ]);
  230.  
  231. //开发中监控,自动编译 (有点频繁 酌情开启)
  232. grunt.registerTask('watcher',['watch']);
  233.  
  234. //压缩及发布
  235. grunt.registerTask('dist',["imagemin","copy","clean:js","uglify","requirejs"]);
  236.  
  237. //test task
  238. grunt.registerTask('test',[/*"clean:js","uglify",*/"requirejs"]);
  239. }

package.json

  1. "devDependencies": {
  2. "grunt": "~0.4.5",
  3. "grunt-babel": "^7.0.0",
  4. "grunt-contrib-clean": "~0.4.0",
  5. "grunt-contrib-copy": "~0.5.0",
  6. "grunt-contrib-cssprite": "~0.1.3",
  7. "grunt-contrib-imagemin": "~2.0.1",
  8. "grunt-contrib-jshint": "~0.6.0",
  9. "grunt-contrib-requirejs": "^1.0.0",
  10. "grunt-contrib-uglify": "~0.5.0",
  11. "grunt-contrib-watch": "~1.0.0",
  12. "grunt-contrib-compass": "~0.7.2"
  13. }

requirejs + sass 实现的前端及 grunt 自动化构建的更多相关文章

  1. grunt自动化构建工具

    一.什么是grunt? 是基于nodejs的项目构建工具,grunt和grunt插件是通过npm安装并管理的,npm是node.js的包管理器 二.为什么要用grunt? 自动化.对于反复重复的任务, ...

  2. Grunt自动化构建工具(网址:http://www.gruntjs.net/getting-started或者http://gruntjs.cn/getting-started)

    简介:Grunt是基于Node.js的项目构建工具,对于需要重复执行的任务,例如压缩.编译.单元测试等,自动化工具可以减少你的工作量,使你的工作更轻松. 一:检测nodejs是否安装好,打开CMD控制 ...

  3. Grunt自动化构建环境搭建

    1.环境准备 需要安装Git.Node.Bower.Grunt.Ruby NodeJS https://nodejs.org/en/ Ruby    http://rubyinstaller.org/ ...

  4. NPM、nodeJS安装,grunt自动化构建工具学习总结

    一:安装 npm是随nodeJs安装包一起安装的包管理工具,能解决NodeJS代码部署上的很多问题: 常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从N ...

  5. 基于gulp 的前端自动化构建方案总结

    一,基础篇 先安装nodejs 使用淘宝镜像安装tnpm 安装 cnpm 插件:npm install -g cnpm --registry=https://registry.npm.taobao.o ...

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

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

  7. 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  8. 前端工作流程自动化——Grunt/Gulp 自动化

    什么是自动化 先来说说为什么要自动化.凡是要考虑到自动化时,你所做的工作必然是存在很多重复乏味的劳作,很有必要通过程序来完成这些任务.这样一来就可以解放生产力,将更多的精力和时间投入到更多有意义的事情 ...

  9. 【前端自动化构建 grunt、gulp、webpack】

    参考资料: 用自动化构建工具增强你的工作流程!:http://www.gulpjs.com.cn/ gulp详细入门教程:http://www.ydcss.com/ JavaScript构建(编绎)系 ...

随机推荐

  1. notepad++安装nppFTP

    官网下载的最新版notepad++,结果pluginadmin里面installnppftp总是安不上,点击install之后然后点是就退出,再进去也没有安装好. 网上找了半天也没找到什么有用信息,最 ...

  2. 有名的素MM

    from math import sqrt item=[] for yr in [1988,1989]: for mth in range(1,13): if mth in [1,3,5,7,8,10 ...

  3. js 对象,数组,字符串,相互转换

    1:对象转换数组 let obj = {'val1':1, 'val2':2, 'val3':3, 'val4':4}; var arr = [] for (let i in obj) { //取键 ...

  4. 手把手设计MyBatis

    最近趁热打铁,研究了一下Mybatis.MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码. 本文完成的Mybatis功能比较简单, ...

  5. 四 Memcache

    官网http://memcached.org 了解 cookies和session 安装memcached # yum install memcached  -y 安装nc和telnet 来管理mem ...

  6. spring boot mybatis打印SQL语句

    在logback-spring.xml 文件中添加 <logger name="com.ibatis" level="DEBUG" /> <l ...

  7. 解决vscode格式化vue文件出现的问题

    遇到的问题 使用vscode开发vue项目的时候,格式化vue文件,与自己配置的eslint标准会有冲突. 引号问题:单引号变双引号 分号问题:行末是否加分号.自动加/减分号 当然还会有其他个性化冲突 ...

  8. Oracle数据库体系结构之进程结构(4)

    Oracle进程结构包括用户进程,服务进程,后台进程. 1. 用户进程 用户进程在数据库用户要求连接到Oracle服务器时开始启动. 用户进程是要求Oracle服务器交互的一种进程 它必须首先建立一个 ...

  9. Deepin 自动挂载win NTFS磁盘

    安装了双系统 WIN10+Deepin15.4,系统开机进入Linux,刚开始在/media/my-PC里面还能看到win系统上的C.E.F盘,系统提示更新后,再次打开/media 看不见NTFS分区 ...

  10. 022 Jquery总结

    1.大纲 jQuery 库中的 $() 是什么? 网页上有 5 个div元素,如何使用 jQuery来选择它们? jQuery 里的 ID 选择器和 class 选择器有何不同? 如何在点击一个按钮时 ...