zoukankan      html  css  js  c++  java
  • gulpfile.js 文件配置

      1     // --本地服务器
      2     var gulp = require('gulp'),
      3         browserSync = require('browser-sync').create(),
      4         // SSI = require('browsersync-ssi'),
      5         reload = browserSync.reload,
      6         watch = require('gulp-watch'),
      7         uglify = require('gulp-uglify'),
      8         concat = require('gulp-concat'),
      9         jshint = require('gulp-jshint'),
     10         csscomb = require('gulp-csscomb'),
     11         csslint = require('gulp-csslint'),
     12         csso = require('gulp-csso'),
     13         prefixer = require('gulp-autoprefixer'),
     14         clean = require('gulp-clean'),
     15         rename = require("gulp-rename"),
     16         zip = require('gulp-zip'),
     17         imagemin = require('gulp-imagemin'),
     18         pngquant = require('imagemin-pngquant'),
     19         template = require('gulp-template'),
     20         processhtml = require('gulp-processhtml'),
     21         gulpif = require('gulp-if'),
     22         minimist = require('minimist'),
     23         fileinclude = require('gulp-file-include'),
     24         shell = require('gulp-shell'),
     25         less = require('gulp-less'),
     26         config = require('./config.json'),
     27         //确保本地已安装gulp-sourcemaps [cnpm install gulp-sourcemaps --save-dev]
     28         sourcemaps = require('gulp-sourcemaps'),
     29         combiner = require('stream-combiner2'),
     30         //确保本地已安装gulp-minify-css [cnpm install gulp-minify-css --save-dev]
     31         cssmin = require('gulp-minify-css');
     32         //确保本地已安装gulp-less [cnpm install gulp-less --save-dev]
     33 
     34     var knownOptions = {
     35         string: 'env',
     36         default: {
     37             env: process.env.NODE_ENV || 'dev'
     38         }
     39     };
     40 
     41     var filetask = {
     42         string: 'file',
     43         default: {
     44             file: process.env.NODE_ENV || 'all'
     45         }
     46     };
     47 
     48     // --env dev
     49     // --env pro
     50 
     51     var options = minimist(process.argv.slice(2), knownOptions, filetask);
     52 
     53 
     54     // ----- js -----
     55     gulp.task('jstask', function() {
     56         if (!options.file) {
     57             console.log('检查全部js文件');
     58             console.log('运行gulp jstask --file 文件名,查看对应文件错误信息');
     59             return gulp.src('./images/*.js')
     60                 // .pipe(watch('./src/images/*.js')) // 只重新编译被更改过的文件
     61                 // js检查
     62                 .pipe(jshint())
     63                 .pipe(jshint.reporter('fail'));
     64         } else {
     65             console.log('检查js文件: ./images/' + options.file);
     66             return gulp.src('./images/' + options.file)
     67                 // .pipe(watch('./src/images/*.js')) // 只重新编译被更改过的文件
     68                 // js检查
     69                 .pipe(jshint())
     70                 .pipe(jshint.reporter('default'));
     71         }
     72 
     73     });
     74 
     75 
     76 
     77     // js压缩发布
     78     gulp.task('jstask-min', ['jstask'], function() {
     79         return gulp.src('./build/*.js')
     80             // 合并js
     81             .pipe(concat('main.min.js'))
     82             // 压缩js
     83             .pipe(uglify())
     84             .pipe(gulp.dest('./build'));
     85     });
     86 
     87     //js/css压缩发布-首页优化
     88     gulp.task("csstask-min-index",function(){
     89         gulp.src(['./images/iconfont.css','./images/l_base.css','./images/l_module.css','./images/index.css'])
     90             .pipe(concat('index-min.css'))
     91             .pipe(gulp.dest('./images'));
     92     });
     93     gulp.task("jstask-min-index",function(){
     94         gulp.src(['./images/jquery-1.8.3.min.js',
     95                     './images/jquery.cookie.js',
     96                     './images/svg-min.js',
     97                     './images/l_obox.js',
     98                     './images/l_module.js',
     99                     './images/l_base.js',
    100                     './images/idangerous.swiper2.7.6.min.js',
    101                     './images/index.js',
    102                     './images/templete_nav_search.js'])
    103             .pipe(concat('index-min.js'))
    104             .pipe(gulp.dest('./images'));
    105     });
    106 
    107 
    108     // ----- css -----
    109     gulp.task('csstask', function() {
    110         if (!options.file) {
    111             console.log('检查全部css');
    112             console.log('运行gulp csstask --file 文件名,查看对应文件错误信息');
    113 
    114             return gulp.src('./images/*.css')
    115                 // css检查
    116                 .pipe(csslint())
    117                 .pipe(csslint.reporter('fail'));
    118 
    119         } else {
    120             console.log('检查css文件: ./images/' + options.file);
    121             return gulp.src('./images/' + options.file)
    122                 // .pipe(watch('./src/images/*.css')) // 只重新编译被更改过的文件
    123                 // css检查
    124                 .pipe(csslint())
    125                 .pipe(csslint.reporter());
    126 
    127             // css私有变量补全
    128             // .pipe(prefixer())
    129             // css顺序调整
    130             // .pipe(csscomb())
    131             // .pipe(gulp.dest('./build/images'))
    132             // .pipe(gulp.dest('./build'))
    133         }
    134 
    135     });
    136 
    137 
    138     // css压缩发布
    139     gulp.task('csstask-min', ['csstask'], function() {
    140         return gulp.src('./build/*.css')
    141             //压缩css
    142             .pipe(csso())
    143             .pipe(gulp.dest('./build/'));
    144     });
    145 
    146 
    147     // ----- html 内容替换 -----
    148 
    149     // html预览监测
    150     gulp.task('public', function() {
    151         return gulp.src('./static/public/*')
    152             .pipe(gulp.dest('./preview/public'));
    153     });
    154 
    155     gulp.task('contenttask', ['public'], function() {
    156         console.log('打包环境: '+options.env);
    157         return gulp.src('./template/**/*.{html,shtml}')
    158             // .pipe(watch('./src/*.{html,shtml}')) // 只重新编译被更改过的文件
    159             // 替换内容
    160 
    161         .pipe(gulpif(options.env === 'dev', template(config.dev_template,{'interpolate':/<%=([sS]+?)%>/g})))
    162             .pipe(gulpif(options.env === 'pro', template(config.pro_template,{'interpolate':/<%=([sS]+?)%>/g})))
    163             // .pipe(gulpif(options.env === 'production', processhtml()))
    164             // 替换引用
    165             .pipe(processhtml())
    166             .pipe(gulp.dest('./build'))
    167 
    168             .pipe(gulpif(options.env === 'dev', shell(['touch <%= siteId %>.site'], {
    169                 templateData: {
    170                     siteId: config.testSiteId
    171                 }
    172             })))
    173             .pipe(gulpif(options.env === 'pro', shell(['touch <%= siteId %>.site'], {
    174                 templateData: {
    175                     siteId: config.proSiteId
    176                 }
    177             })));
    178 
    179 
    180     });
    181 
    182     gulp.task('contenttask-preview',['public'],  function() {
    183         return gulp.src('./static/**/*.{html,shtml}')
    184             // 替换内容
    185             .pipe(template(config.preview_template))
    186             // 替换引用
    187             .pipe(processhtml())
    188             .pipe(fileinclude({
    189                 prefix: '@@',
    190                 basepath: '@file'
    191             }))
    192             .pipe(gulp.dest('./preview'));
    193     });
    194 
    195 
    196 
    197     gulp.task('contenttask-watch', ['public'], function() {
    198         return gulp.src('./static/**/*.{html,shtml}')
    199             .pipe(watch('./static/**/*.{html,shtml}')) // 只重新编译被更改过的文件
    200             // 替换内容
    201             .pipe(template(config.debug_template))
    202             // 替换引用
    203             .pipe(processhtml())
    204             .pipe(fileinclude({
    205                 prefix: '@@',
    206                 basepath: '@file'
    207             }))
    208             .pipe(gulp.dest('./preview'));
    209     });
    210 
    211 
    212 
    213 
    214 
    215     // ----- 文件操作 -----
    216 
    217     // 文件清理
    218     gulp.task('clean', function() {
    219         return gulp.src(['./build', './preview', './*.site'], {
    220                 read: false
    221             })
    222             .pipe(clean({
    223                 force: true
    224             }));
    225     });
    226 
    227     gulp.task('clean-build', function() {
    228         return gulp.src(['./build'], {
    229                 read: false
    230             })
    231             .pipe(clean({
    232                 force: true
    233             }));
    234     });
    235 
    236     gulp.task('clean-preview', function() {
    237         return gulp.src(['./preview'], {
    238                 read: false
    239             })
    240             .pipe(clean({
    241                 force: true
    242             }));
    243     });
    244 
    245     // ----- 压缩图片 -----
    246 
    247     //压缩图片 - imagemin
    248     gulp.task('imagemin', function() {
    249         return gulp.src('./images/*.{png,jpg,jpeg,gif}')
    250             .pipe(imagemin({
    251                 progressive: true,
    252                 svgoPlugins: [{
    253                     removeViewBox: false
    254                 }],
    255                 use: [pngquant({
    256                     quality: '100'
    257                 })]
    258             }))
    259             .pipe(gulp.dest('./images'));
    260     });
    261 
    262     //编译less
    263 
    264 
    265     gulp.task("testLess",function(){
    266         var combined = combiner.obj([
    267             gulp.src("./images/less/*.less"),
    268             watch("./images/less/*.less"),
    269             // sourcemaps.init(),
    270             less(),
    271             cssmin(),
    272             // sourcemaps.write('./maps'),
    273             gulp.dest("./images")
    274         ]);
    275 
    276         combined.on('error', function(){
    277             console.error.bind(console)
    278         });
    279         return combined;
    280      });
    281 
    282     gulp.task('lesstask', function() {
    283         return gulp.watch('./images/less/*.less', ['testLess']);
    284     });
    285 
    286     gulp.task("less-build",function(){
    287         var changeFileArr = []
    288         var fileArr = []
    289         if (options.file && typeof(options.file) == 'string') {
    290             changeFileArr = options.file.split(',')
    291             for (var i = 0; i < changeFileArr.length; i++) {
    292                 if (changeFileArr[i].indexOf('/less/') > 0) {
    293                     fileArr.push('../' + changeFileArr[i])
    294                 }
    295             }
    296         }
    297 
    298         var combined = combiner.obj([
    299             gulp.src(fileArr),
    300             // sourcemaps.init(),
    301             less(),
    302             cssmin(),
    303             // sourcemaps.write('./maps'),
    304             gulp.dest("./images")
    305         ]);
    306 
    307         combined.on('error', function(){
    308             console.error.bind(console)
    309         });
    310         return combined;
    311     })
    312 
    313     gulp.task("lessBuildAll",function(){
    314         var combined = combiner.obj([
    315             gulp.src("./images/less/*.less"),
    316             // sourcemaps.init(),
    317             less(),
    318             cssmin(),
    319             // sourcemaps.write('./maps'),
    320             gulp.dest("./images")
    321         ]);
    322 
    323         combined.on('error', function(){
    324             console.error.bind(console)
    325         });
    326         return combined;
    327     })
    328 
    329     // 开启本地 Web 服务器功能
    330     gulp.task('webserver-static', function() {
    331         // 开发预览
    332         browserSync.init({
    333             port: config.serverPort,
    334             server: {
    335                 baseDir: ["preview", "./"],
    336                 directory: true,
    337                 middleware: function(req, res, next) {
    338                     var fs = require('fs');
    339                     var ssi = require('ssi');
    340                     var baseDir = './preview/';
    341                     var pathname = require('url').parse(req.url).pathname;
    342                     var filename = require('path').join(baseDir, pathname.substr(-1) === '/' ? pathname + 'index.html' : pathname);
    343 
    344                     var parser = new ssi(baseDir, baseDir, '/**/*.shtml',true);
    345                     if (filename.indexOf('.shtml') > -1 && fs.existsSync(filename))
    346                         res.end(parser.parse(filename, fs.readFileSync(filename, {
    347                             encoding: 'utf8'
    348                         })).contents);
    349                     else
    350                         next();
    351                 }
    352             }
    353         });
    354 
    355         gulp.watch('./**/*').on("change", browserSync.reload);
    356 
    357     });
    358 
    359 
    360     // ----- 任务 -----
    361 
    362     //默认任务
    363     gulp.task('default', function() {
    364         gulp.run('help');
    365     });
    366 
    367     gulp.task('help', function() {
    368         console.log('gulp build --env dev          ---测试环境模板打包');
    369         console.log('gulp build --env pro          ---生产环境模板打包');
    370         console.log('gulp debug                    ---本地调试');
    371         console.log('gulp jstask                   ---js文件检查');
    372         console.log('gulp jstask --file 文件名     ---检查js文件');
    373         console.log('gulp csstask                  ---css文件检查');
    374         console.log('gulp csstask --file 文件名    ---检查css文件');
    375         console.log('gulp imagemin                 ---图片压缩');
    376     });
    377 
    378     //项目完成提交任务
    379     gulp.task('build', ['clean-build'], function(a) {
    380         gulp.run('contenttask');
    381         // gulp.run('imagemin');
    382     });
    383 
    384     gulp.task('preview', ['clean-preview'], function(a) {
    385         gulp.run('contenttask-preview');
    386     });
    387 
    388     gulp.task('debug', ['clean-preview'], function(a) {
    389         gulp.run('contenttask-watch');
    390         gulp.run('webserver-static');
    391         gulp.run('lessBuildAll');
    392         gulp.run('lesstask');
    393     });
    394 
    395     //项目完成提交任务
    396     gulp.task('build-min', ['clean'], function() {
    397         gulp.run('jstask-min');
    398         gulp.run('csstask-min');
    399         gulp.run('contenttask');
    400         gulp.run('imagemin');
    401     });

    配置前 :安装所有插件

  • 相关阅读:
    Vue路由机制
    谷歌浏览器打不开应用商店的解决方法
    Vue报错——Component template should contain exactly one root element. If you are using vif on multiple elements, use velseif to chain them instead.
    Vue.js学习之——安装
    Vue使用axios无法读取data的解决办法
    关于localstorage存储JSON对象的问题
    2013年整体计划
    个人喜欢的警语收集
    Linux防火墙的关闭和开启
    Flex修改title 转载
  • 原文地址:https://www.cnblogs.com/qiu2841/p/10898533.html
Copyright © 2011-2022 走看看