gulp基础配置,打包官网绰绰有余

前几周做了公司官网项目,由于要seo友好,所以用了比较老的技术(也不是老只是没框架)兼容IE8,真的是要人命啊

言归正传

具体用的技术架构

js+html+css+gulp

所以说一下gulp一些配置

1、首先,需要node的环境如果没有的话需要安装一下
2、全局安装gulp

  npm install --global gulp

3、在项目初始化

   npm init

也可以直接创建一个package.json文件
向内添加

4、

npm install

5、作为项目的开发依赖安装:

   npm install --save-dev gulp

6、编写Gulp配置 创建gulp的config文件

   gulpfile.js

以下是我用到package.json文件

{
  "name": "xxx",
  "version": "1.1.0",
  "description": "xxx",
  "main": "index.js",
  "directories": {
    "lib": "lib"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "gulp build",
    "dev": "gulp dev"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-preset-env": "^1.7.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-2": "^6.24.1",
    "del": "^5.0.0",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^7.0.1",
    "gulp-babel": "^7.0.1",
    "gulp-cache": "^1.1.3",
    "gulp-clean": "^0.4.0",
    "gulp-clean-css": "^4.2.0",
    "gulp-connect": "^5.7.0",
    "gulp-file-include": "^2.1.1",
    "gulp-htmlmin": "^5.0.1",
    "gulp-imagemin": "^7.1.0",
    "gulp-rename": "^1.4.0",
    "gulp-uglify": "^3.0.2",
    "imagemin-pngquant": "^8.0.0",
    "run-sequence": "^2.2.1"
  },
  "dependencies": {}
}

7、gulpfile.js配置

var gulp = require("gulp");

var babel = require('gulp-babel');//转ES6
var concat = require('gulp-concat'), //合并文件 

var gulpHtmlMin = require('gulp-htmlmin');//html压缩

var gulpCssMin = require('gulp-clean-css');

var rename = require('gulp-rename');

var gulpJsmin = require('gulp-uglify'); //js压缩

var gulpImgsmin = require('gulp-imagemin');//图片压缩

var pngquant = require('imagemin-pngquant');

var connect = require('gulp-connect');// 启动服务

var autoprefixer = require('gulp-autoprefixer'); //补全浏览器前缀

var fileinclude  = require('gulp-file-include');

var cache = require('gulp-cache');

var sequence = require('run-sequence');//整合模块

var clean = require('gulp-clean');
var  rev = require('gulp-rev') //版本控制

function revJs() {
src(jsSrc).pipe(rev()).pipe(rev.manifest()).pipe(dest('./rev/js'))
 } 
function revCss() {
 src(cssSrc).pipe(rev()).pipe(rev.manifest()).pipe(dest('./rev/css')) } 
function revHtml() {
   return src(['rev/**/*.json',   'src/**/*.html']).pipe(revCollector()).pipe(dest('src')) 
 }
//资源文件跨域配置
var cors = function (req, res, next) {

    res.setHeader('Access-Control-Allow-Origin', '*');

    next();

};
//引入压缩html所需的模块

gulp.task('htmlmin', function () { //可以单个压缩

    //[ './a/**/*,'!./a/{test,test/**}']

    return gulp.src(['src/**/*.html', '!src/{plugins,plugins/**}'])

        .pipe(gulpHtmlMin({ //删除空格

            collapseWhitespace: true, //删除注释

            removeComments: true

        }))

        .pipe(gulp.dest('dist/')).pipe(connect.reload())

});

gulp.task('fileinclude', function() {
    // 适配page中所有文件夹下的所有html,排除page下的include文件夹中html
    gulp.src(['src/**/*.html', '!src/**/include/**.html'])
        .pipe(fileinclude({
          prefix: '@@',
          basepath: '@file'
        }))
    .pipe(gulp.dest('dist/'));
});
可以引入公共的头部文件跟footer 文件,在打包的时候直接打进去不会影响加载问题,但是如果本地运行只是监听了此变化并没有打包,所以在本地加载的时候没有加载上此插件//后续还会持续研究

gulp.task('cssmin', function () {

    return gulp.src(['src/css/*.css', '!src/{plugins,plugins/**}'])

        .pipe(gulpCssMin())

        .pipe(autoprefixer({
        //自动给加浏览器前缀
            overrideBrowserslist: [
                'last 2 versions', 
                'Android >= 4.0',
                "iOS 7.1",
                "Chrome > 31",
                "ff > 31",
                "ie >= 8"
            ],
            cascade: true, //是否美化属性值 默认:true 像这样:
            remove:true //是否去掉不必要的前缀 默认:true 
        }))

        .pipe(gulp.dest('dist/css')).pipe(connect.reload())

});

gulp.task('jsmin', function () { //注意,js中可能有多个文件夹,比如说一些插件一些类库之类的,
    return gulp.src(['src/js/*.js', '!src/{plugins,plugins/**}'])
        .pipe(babel())
        .pipe(gulpJsmin({ mangle: { toplevel: true } }))
        .pipe(gulp.dest('dist/js')).pipe(connect.reload())

});

gulp.task('imagesmin', function () {
    gulp.src('src/img/**/*')
        // .pipe(cache(gulpImgsmin({
        //     progressive: true,
        //     svgoPlugins: [{removeViewBox: false}],
        //     use: [pngquant()]
        // })))
        .pipe(gulp.dest('dist/img'));
});



//创建watch任务去检测html文件,其定义了当html改动之后,去调用一个Gulp的Task

gulp.task('watch', function () {
    gulp.watch('./src/page/*.html', ['htmlmin', 'fileinclude']);
    // gulp.watch('./src/component/*.html', ['htmlComMin']);
    gulp.watch('./src/js/*.js', ['jsmin']);
    gulp.watch('./src/css/*.css', ['cssmin']);
    gulp.watch('.src/img/**/*', ['imagesmin']);

});
//使用connect启动一个Web服务器

gulp.task('connect', function () {
    connect.server({
        root: 'src',
        liveload: true,
        port: 3003,
    });
});
gulp.task('dev', ['watch', 'connect']);
当gulp dev或者npm  run dev的时候会打包启动本地服务器并且监听watch  文件变化

清除任务
gulp.task("clean", function (cb) {
    return gulp.src('dist', {
        read: false
    })
        .pipe(clean({
            force: true
        }));
})

gulp.task('build', function () {
    sequence('clean',
        ['htmlmin', 'fileinclude', 'cssmin', 'jsmin', 'imagesmin'],
        function () {
        });

});
gulp 中
使用gulp-webserver模块
也可以启动服务器
var webserver =require('gulp-webserver');
gulp.task('webserver',function(){
     gulp.src('./')
     .pipe(webserver({
          host:'localhost',
          port:3002,
          livereload:true, //自动刷新
          directoryListing:{
               enable: true,
               path:'./'
          },
     }));
});

8、注 gulp中主要用到的方法

gulp.src 文件源位置
gulp.task 构建任务名和函数
gulp.dest 放置文件位置
gulp.watch 监控

9、注 IE8中打包Es6转ES5会报错误如果你用了 [...]的话
会报assgin()等错误
如果需要兼容IE8

   "babel-preset-stage-2": "^6.24.1",转换以此支持
    在.babelic中配置

你可能感兴趣的:(gulp,webpack)