Github地址:https://github.com/Alvin-Liu/...css
关于Gulp的介绍网上有许多,完整的Gulp自动化工做流配置也很多,但或多或少有不让人满意的地方,加上项目的须要,因而本身便开始尝试写一个本身的前端自动化工做流。项目需求不一样,配置确定有些许区别,因此不能保证vGulp能用于你的项目中。本文只作参考,但愿能为你提供一些帮助,具体的配置请根据实际状况调整。vGulp须要打磨之处还有许多,欢迎各路大神指正。html
vGulp基于Gulp 3.9.1开发而成,用于处理前端项目文件的编译、压缩、合并、打包工做。HTML使用ejs模板编译而成,可根据自定义的语言包和命令编译成不一样语言的HTML文件;css使用sass预处理编译而成,自动添加-webkit-、-moz-、-ms-等前缀;JS没有作过多处理,能够根据我的须要在gulpfile.js文件中添加JSLint或ESLint等。前端
什么状况下可使用vGulp:node
F5键坏了,手指不够长,懒...git
Apaphe等环境下修改文件,找不到合适的自动刷新工具github
开发多语言版本的网站页面等web
1.安装Node.js,安装Gulp(Node.js安装方法请自行搜索,Gulp入门):npm
$ npm install --global gulp // 全局安装 $ npm install --save-dev gulp // 做为项目的开发依赖
2.克隆或者下载本项目,github地址:https://github.com/Alvin-Liu/vGulp:json
$ git clone https://github.com/Alvin-Liu/vGulp.git
3.安装模块依赖:gulp
npm install
4.根据须要简单配置本身的config.json,示例代码:
{ "project" : "vGulp", // 项目名 "src": { // 源文件目录 "ejs": "src/ejs", "sass": "src/sass", "images": "src/images", "js": "src/js", "css": "src/css", "source": "src/source", // 其余文件,如视频,音乐,字体等 "data": "language/data.json" // 语言包路径 }, "dist": { // 打包后文件目录 "html": "html", "js": "static/js", "css": "static/css", "images": "static/images", "source": "static/source" }, "localserver" : { // 本地服务器 "baseDir" : "src", // 网站根目录 "port" : "8081", // 端口 "proxy": false, // 时候启用代理 "target": "127.0.0.1" // 代理地址 }, "lang":["zh","en"], // 语言种类,HTML代码将编译到对应的文件夹中 "data_use": 1, // 指定data.json文件用那一种方式,目前可选0或者1,请看注意事项 "displayInfo": false, // 是否启用文件头部追加内容 "pkg": { // 追加内容模板请在gulpfile.js中修改 "author":"", "description":"", "version":"1.0.0", "homepage":"#", "license":"" }, "replaceWord": { // 全局关键字替换 "html": { "origin": "../", "dist": "../../static/" }, "js": { "origin": "", "dist": "" }, "css": { "origin": "", "dist": "" } }, "concatCssFiles": { // css合并,暂时只支持一个 "filename": "init.min.css", // 合并后的文件名 "folder": "common", // 合并该文件夹中的内容 "files": ["init.css","header.css"] // 指定合并后的文件的前后顺序 }, "concatJsFiles": { // js合并 "filename": "global.min.js", "folder": "common", "files": ["b.js","a.js"] } }
5.根据须要修改gulpfile.js(请尽可能熟悉vGulp以后再尝试);
6.执行gulp任务:
gulp help // gulp参数说明 gulp // 开发,添加命令 --lang= 能够指定语言,例:gulp --lang=en gulp build // 打包 gulp ejs // ejs模板编译 gulp sass // sass编译 gulp js // js合并 gulp clean // 清理无用文件 gulp watch // 监听文件改变
1.在命令后添加 --lang=en 或者 --lang= 指定语言版本,能够执行该语言对应的命令操做,如:
gulp build --lang=en // 只会打包en语言下的HTML文件
2.多语言时,有两种方法应用页面数据,根据我的喜欢在config.json中配置data_use为0或者1;
data_use为0时,一个语言对应一个文件夹,且一个页面对应一个文件夹中的一个文件,如:index.ejs的数据对应index.json。使用该方式时,请先修改data文件的引用路径为 language ,不要指定具体的文件名;
data_use为1时(默认),全部文件对应同一个json文件,config中data.json文件的引用指定到具体的文件名。
3.多语言时,同一个页面因为字体长度等缘由显示会有所差异,此时能够另外引入单独的针对该文件的css代码,全部ejs页面中均可以引用_lang
这一全局变量,进行指定语言引入指定内容,如参考代码中的内容:
<%# 只有当语言为'zh'时,引入文件zh.css %> <% if(_lang='zh'){ %> <%- include('extra/zh.css') %> <% } %>
<br/>
若是了解Gulp或者只是须要一款刷新工具,下面内容能够忽略
如下插件因为使用频率较高且文档较多,使用简单,固仅作列表介绍(毕竟这篇文档主要目的不是用于介绍插件的,是吧):
gulp-ejs: 编译ejs文件(项目使用的是ejs,使用其余请自行更换);
gulp-data: 配合gulp-ejs等使用,用于引入文件数据,如json文件等;
gulp-sass: 编译sass;
gulp-clean-css: 压缩css文件;
gulp-concat: 合并文件;
gulp-autoprefixer: 自动处理浏览器前缀, 如添加 -webkit- ;
gulp-uglify: 压缩js文件;
gulp-clean: 进行多余文件的清理;
gulp-imagemin: 压缩图片;
gulp-css-spriter: 用于合成css雪碧图;
gulp-htmlmin: 压缩html;
browser-sync
Browsersync能让浏览器实时、快速响应您的文件更改(html
、js
、css
、sass
、less
等)并自动刷新页面。
gulp-load-plugins
顾名思义,本插件的功能就是帮你自动require
你在package.json
中声明的依赖。只要一句var $ = require('gulp-load-plugins')()
,则package.json
中声明的gulp-
或gulp.
开头的插件就会自动被放在变量$
下面。如$.util
就等于require('gulp-util')
。
gulp-if
这个插件的功能也很简单,能够条件性的添加stream
,如.pipe($.if(flag, action1()))
,则只会在flag
变量为true
时才会将action1()
添加到stream
中去。
gulp-filter
gulp-filter
能够把stream里的文件根据必定的规则进行筛选过滤。好比gulp.src
中传入匹配符匹配了不少文件,能够把这些文件pipe
给gulp-filter
做二次筛选,如gulp.src('**/*.js').pipe($.filter(**/a/*.js))
,原本选中了全部子文件下的js文件,通过筛选后变成名为a的子文件夹下的js
文件。
gulp-plumber
这个插件的做用简单来讲就是一旦pipe中的某一steam报错了,保证下面的steam
还继续执行。由于pipe默认的onerror函数会把剩下的stream给unpipe掉,这个插件阻止了这种行为。
gulp-header
这个工具用来在压缩后的JS、CSS文件中添加头部注释,你能够包含任意想要的信息,一般就是做者、描述、版本号、license等。
gulp-order
gulp-order能够指定文件在stream中的执行顺序,例如本例中css合并时,能够指定合并后css文件的先后顺序,防止前面的样式被后面的覆盖。
gulp-replace
在项目中这个插件仍是挺有用的,能够批量替换字符串,而且支持使用正则替换。
gulp-print
这个插件的做用很简单,打印出stream里面的全部文件名,一般调试的时候比较须要。
gulp-rename
该插件能够对文件进行从新命名。
yargs是Node中处理命令行参数的通用解决方案。只要一句代码var args = require('yargs').argv;
就可让命令行的参数都放在变量args上,很是方便。它能够处理的参数类型也是多种多样的:
单字符的简单参数,如传入-m=5或-m 5,则可获得args.m = 5。
多字符参数(必须使用双连字符),如传入--lang=en或--lang en,则可获得args.lang = en。
不带值的参数,如传入--mock,则会被认为是布尔类型的参数,可获得args.mock = true。
除此以外,还支持不少其余类型的传参方式,具体可参考它的文档。
fs是Node的文件系统模块,全部的方法都有异步和同步的形式。vGulp主要使用fs模块对文件进行判断存在和读取操做。
path模块用于对路径进行操做,如:
path.join([path1][, path2][, ...])
用于链接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是"/",Windows系统是""。
path.dirname(p)
返回路径中表明文件夹的部分。
path.basename(p[, ext])
返回路径中的最后一部分。
path.extname(p)
返回路径中文件的后缀名,即路径中最后一个'.'以后的部分。若是一个路径中并不包含'.'或该路径只包含一个'.' 且这个'.'为路径的第一个字符,则此命令返回空字符串。
var path = require('path'), file = 'D:/git/vGulp/test.js'; console.log(path.join('/hi', 'test', '2s/1s', 'tab', '..')); // \hi\test\2s\1s console.log(__dirname); // D:\git\vGulp console.log(path.dirname(file)); // D:/git/vGulp console.log(path.basename(file)); // test.js console.log(path.extname(file)); // .js
配置好像有点繁琐(自我感受)
没有进行md5命名和寻找更好的路径替换方式等
Gulp 4.0好像快来了
关于node的更多内容请参考官方文档。
参考内容: