requirejs + sass 实现的前端及 grunt 自动化构建
对于 现在的 vue 、 react 、webpack 来说也许有点旧了,有时候,越简单的技术越可靠,备份一下
module.exports = function(grunt) { // Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'), compass: {
development: {
options: {
generatedImagesDir:'public/src/slice',//合并后的雪碧图dir
imagesDir:'public/src/slice', //雪碧图合并前图片碎片dir
sassDir: 'public/src/sass',
cssDir: 'public/src/sass-css',
outputStyle:'compressed',//CSS output mode. Can be: nested, expanded, compact, compressed.
force:false
}
}
}, sprite: {
options: {
// sprite背景图源文件夹,只有匹配此路径才会处理,默认 images/slice/
imagepath: 'public/src/slice/',
// 雪碧图输出目录,注意,会覆盖之前文件!默认 images/
spritedest: 'public/src/css/',
// 替换后的背景路径,默认 ../images/
spritepath: 'img/',
// 各图片间间距,如果设置为奇数,会强制+1以保证生成的2x图片为偶数宽高,默认 0
padding: 2,
// 是否以时间戳为文件名生成新的雪碧图文件,如果启用请注意清理之前生成的文件,默认不生成新文件
newsprite: false,
// 版本号 ver 未设置时,是否给雪碧图追加时间戳,默认不追加
spritestamp: true,
// 在CSS文件末尾追加时间戳,默认不追加
cssstamp: false,
// 默认使用二叉树最优排列算法
algorithm: 'binary-tree',
// 默认使用`pngsmith`图像处理引擎
engine: 'pngsmith', //版本号
ver:new Date().toISOString().replace(/\D/g,'')
},
autoSprite: {
files: [{
expand: true,
cwd: 'public/src/sass-css/',
src: '**/*.css',
dest: 'public/src/css/',
ext: '.css'
}]
}
}, imagemin: {
dynamic: {
options: {
optimizationLevel: 3 // png图片优化水平,3是默认值,取值区间0-7
},
files: [
{
expand: true,
cwd: "public/src/css/img/", //只压缩 sprite产生的合并图片
src: "**/*.png",
dest: "public/src/css/img/"
}
]
}
}, clean: {
sassCss:{
src:["public/src/sass-css/*"]
},
css: {
src: ['public/src/css/*']
},
js:{
src:['public/dist/js/*']
}
},
copy: {
font: {
expand: true,
cwd: 'public/src/font',
src: '**',
dest: 'public/font'
},
css: {
expand: true,
cwd: 'public/src/css/',
src: '**',
dest: 'public/dist/css/'
}
}, babel: {
options: {
presets: ['env'],//the same as latest,including es2015,es2016,es2017 plugins
plugins: ["transform-es2015-modules-amd"],//import file translate to amd module
sourceMap: true
},
files: {
expand: true,
cwd: 'public/src/babel/es6/', //just a test now
src: ['**/*.js'],
dest: 'public/src/babel/es5/'
}
}, uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
sourceMap: true,
mangle: false, //不混淆变量名
comments: 'some' //保留 @preserve @license @cc_on等注释
},
build: {
files:[{
expand: true,
cwd: 'public/src/js',
src: '**/*.js',
dest: 'public/dist/js',
ext: '.js',
extDot: 'last'
}]
}
}, requirejs: {
build: {
options : {
optimize:'none', //指定压缩工具,none 不压缩
baseUrl : 'public/dist/js',//在压缩后的模块上进行文件合并
mainConfigFile: 'public/dist/js/require.config.js',
dir:"public/dist/js",//输出文件夹
keepBuildDir:true,//构建过程中勿删除重建dir文件夹
allowSourceOverwrites:true,//dir文件夹与源文件夹相同时允许重写构建前的文件
removeCombined: false,
findNestedDependencies:false,
optimizeCss:'none',
modules:[
{
/******
该合并后的模块几乎在每个页面都使用到,将作为公用模块,请确保该模块先于页面js文件引入,避免重复加载已合并的文件,
由于requirejs模块默认加载没有顺序,该模块置入 views/component/foot.ejs,少数未引用foot的页面请单独处理,
page/head.js 不是使用 require 的模块或其依赖引入,请声明为具名模块(define("page/head",[xxx,xxx],function(){}))以避免开发模式下模块未合并时报错
*********/
name:"page/head",
create: false
},
{
name:'ui/ui',
include:["ui/ux","ui/ejs","ui/tpl"],
exclude:["jquery","pin","request"],
create: false
},
{
name:'highstock',
include:["raphael","chart/maps/chinaMap"],
exclude:["jquery"],
create: false
},
{
name:"common/common",
include:["jquery","pin","request","common/common","common/gapageview"],
excludeShallow:["ui/ux","ui/ejs","ui/tpl"],
create: false
},
{
name:'page/analyze/analyze_report',
include:['page/analyze/report/step1','page/analyze/report/step2Major','page/analyze/report/step2Sch'],
exclude:["jquery","pin","request","ui/ux","ui/ejs","ui/tpl","common/common","page/head"],
create: false
},
{
name:'page/zhiyuan/zhiyuan',
include:["page/zhiyuan/list/selectArea","widget/page","common/fixBottom"],
exclude:["jquery","pin","request","ui/ux","ui/ejs","ui/tpl","common/common","page/head"],
create: false
}
]
}
}
}, watch: {
options: {
spawn:true,
interrupt:true,
debounceDelay: 250
},
sass:{
files: 'public/src/sass/**/*.scss',
tasks: [/*"clean:sassCss",*/"clean:css","compass","sprite"]
},
babel:{
files:'public/src/babel/es6/**/*.js',
tasks:['babel']
}
} }); // 加载任务的插件
//css
//node-compass requires compass and ruby gem , install ruby then install compass via gem
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.loadNpmTasks('grunt-contrib-cssprite');
grunt.loadNpmTasks('grunt-contrib-imagemin');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy'); //js
grunt.loadNpmTasks('grunt-babel');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-requirejs'); //watch
grunt.loadNpmTasks('grunt-contrib-watch'); //开发期的编译任务
grunt.registerTask('default', [
"clean:sassCss",
"clean:css",
"compass",
"sprite",
"babel"
]); //开发中监控,自动编译 (有点频繁 酌情开启)
grunt.registerTask('watcher',['watch']); //压缩及发布
grunt.registerTask('dist',["imagemin","copy","clean:js","uglify","requirejs"]); //test task
grunt.registerTask('test',[/*"clean:js","uglify",*/"requirejs"]);
}
package.json
"devDependencies": {
"grunt": "~0.4.5",
"grunt-babel": "^7.0.0",
"grunt-contrib-clean": "~0.4.0",
"grunt-contrib-copy": "~0.5.0",
"grunt-contrib-cssprite": "~0.1.3",
"grunt-contrib-imagemin": "~2.0.1",
"grunt-contrib-jshint": "~0.6.0",
"grunt-contrib-requirejs": "^1.0.0",
"grunt-contrib-uglify": "~0.5.0",
"grunt-contrib-watch": "~1.0.0",
"grunt-contrib-compass": "~0.7.2"
}
requirejs + sass 实现的前端及 grunt 自动化构建的更多相关文章
- grunt自动化构建工具
一.什么是grunt? 是基于nodejs的项目构建工具,grunt和grunt插件是通过npm安装并管理的,npm是node.js的包管理器 二.为什么要用grunt? 自动化.对于反复重复的任务, ...
- Grunt自动化构建工具(网址:http://www.gruntjs.net/getting-started或者http://gruntjs.cn/getting-started)
简介:Grunt是基于Node.js的项目构建工具,对于需要重复执行的任务,例如压缩.编译.单元测试等,自动化工具可以减少你的工作量,使你的工作更轻松. 一:检测nodejs是否安装好,打开CMD控制 ...
- Grunt自动化构建环境搭建
1.环境准备 需要安装Git.Node.Bower.Grunt.Ruby NodeJS https://nodejs.org/en/ Ruby http://rubyinstaller.org/ ...
- NPM、nodeJS安装,grunt自动化构建工具学习总结
一:安装 npm是随nodeJs安装包一起安装的包管理工具,能解决NodeJS代码部署上的很多问题: 常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从N ...
- 基于gulp 的前端自动化构建方案总结
一,基础篇 先安装nodejs 使用淘宝镜像安装tnpm 安装 cnpm 插件:npm install -g cnpm --registry=https://registry.npm.taobao.o ...
- 应用Grunt自动化地优化你的项目前端
在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- 前端工作流程自动化——Grunt/Gulp 自动化
什么是自动化 先来说说为什么要自动化.凡是要考虑到自动化时,你所做的工作必然是存在很多重复乏味的劳作,很有必要通过程序来完成这些任务.这样一来就可以解放生产力,将更多的精力和时间投入到更多有意义的事情 ...
- 【前端自动化构建 grunt、gulp、webpack】
参考资料: 用自动化构建工具增强你的工作流程!:http://www.gulpjs.com.cn/ gulp详细入门教程:http://www.ydcss.com/ JavaScript构建(编绎)系 ...
随机推荐
- 简单的接口测试类和测试生成报告工具HTMLTestRunner.py
Demo.py #coding:utf-8 # import requests import json ''' data = { 'username':'jackson', 'password':'a ...
- .NET Core----七牛云图片上传
在引用官方的qiniu.core的nuget是总是发生错误,错误如下,所以就在网上找到了一种解决方案,并稍微改进了一番, 以下是引用图: 方法一: 第一步:引用nuge 第二步:新建项目新建控制器视图 ...
- Android应用市场的帮助类
写了一个Android应用市场的帮助类,如下: public class MarketUtils { public static final String MARKET_DATA = "ma ...
- 仓鼠找sugar
洛谷P3398 仓鼠找sugar 题目传送门 参考 \(whm\) 大佬的博客 这儿 代码不难,难在思路上. 令 \(X = lca(a,b) Y = lca(c,d)\) 仓鼠 \((cs)\) 的 ...
- webstorm 2019.1 注册教程
注册教程:https://blog.csdn.net/hdp134793/article/details/81530472 IntelliJ IDEA 注册码获取网站
- 编译php-5.3.28
1. 下载php-5.3.28 2. 编译/安装 ./configure --prefix=/usr/local/php --enable-fpm --enable-maintainer-zts -- ...
- Android开发PreferenceActivity 用法的代码
将开发过程中常用的一些内容做个收藏,下面资料是关于Android开发PreferenceActivity 用法的内容,希望对大伙有一些用处.public class Setting extends P ...
- C#学习-类型转换
类型转换的方式主要有以下几种: 隐式类型转换,由低级别类型向高级类型的转换过程.例如派生类可以隐式地转换为它的父类,装箱过程就属于这种隐式类型转换. 显式类型转换,也叫强制类型转换, 通过is和as运 ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- Spark 常规性能调优
1. 常规性能调优 一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性 ...