注:因自动化搭建需要新建很多文件,在这里有现成的文件供你使用,请下载,如想自己搭建请安装以下步骤进行搭建
一、准备工作
$ mkdir my-gulp-project // 新建项目 $ yarn init // 生成package.json文件 $ cd my-gulp-project // 打开项目 $ code . // 打开vscode
二、开始搭建
$ yarn add gulp --dev # npm i gulp --save-dev $ mkdir gulpfile.js $ 新建以下除蓝色框外文件
三、配置 gulpfile.js
/** * @src 读取文件 * @dest 输出文件 * @parallel 异步执行 * @series 同步执行 * @watch 监听文件变化 */ const { src, dest, parallel, series, watch } = require('gulp') // 删除文件 const del = require('del') // gulp 插件 const loadPlugins = require('gulp-load-plugins') const plugins = loadPlugins() // 热更新 const browserSync = require('browser-sync') const bs = browserSync.create() // 线上-打包-名称 const dist = 'dist' // 临时-打包-名称 const temp = 'temp' // html中定义变量--data中配置变量 const data = { pkg: require('./package.json') } // 打包css文件 const style = () => { return src('src/assets/styles/**', { base: 'src' }) .pipe(plugins.sass({ outputStyle: 'expanded' })) // 结尾括号换行 .pipe(dest(temp)) .pipe(bs.reload({ stream: true })) // 更改页面后浏览器更新 } // 打包js文件 const script = () => { return src('src/assets/scripts/*.js', { base: 'src' }) .pipe(plugins.babel({ presets: ['@babel/preset-env'] })) // ES6转换ES5 .pipe(dest(temp)) .pipe(bs.reload({ stream: true })) // 更改页面后浏览器更新 } // 打包html页面 const page = () => { return src('src/*.html', { base: 'src' }) .pipe(plugins.swig({ data, defaults: { cache: false } })) .pipe(dest(temp)) .pipe(bs.reload({ stream: true })) // 更改页面后浏览器更新 } // 打包图片 const images = () => { return src('src/assets/images/**', { base: 'src' }) .pipe(plugins.imagemin()) .pipe(dest(dist)) } // 打包字体文件 const fonts = () => { return src('src/assets/fonts/**', { base: 'src' }) .pipe(dest(dist)) } // 打包额外文件 const extra = () => { return src('public/**', { base: 'public' }) .pipe(dest(dist)) } /** * 压缩 html 引入的文件中的build注释 * eg: build:css assets/styles/make.css */ const useref = () => { return src('temp/*.html', { base: temp }) .pipe(plugins.useref({ searchPath: [temp, '.'] })) .pipe(plugins.if(/.js$/, plugins.uglify())) .pipe(plugins.if(/.css$/, plugins.cleanCss())) .pipe(plugins.if(/.html$/, plugins.htmlmin({ collapseWhitespace: 'true', minifyCss: true, minifyJS: true }))) .pipe(dest('dist')) } // 启动热更新服务 const serve = () => { // 监听文件变化 watch('src/assets/styles/**', style) watch('src/assets/scripts/*.js', script) watch('src/*.html', page) watch([ 'src/assets/images/**', 'src/assets/fonts/**', 'public/**' ], bs.reload) return bs.init({ notify: false, server: { baseDir: [temp, 'src', 'public'], routes: { '/node_modules': 'node_modules' } } }) } // 清除 dist AND temp 文件 const clean = () => { return del([dist, temp]) } const compile = parallel(style, script, page)
// 运行打包线上dist const build = series(clean, parallel( series(compile, useref), images, fonts, extra ))
// 运行本地 const devlop = series(clean, compile, serve) module.exports = { devlop, build, serve, clean }
四、修改 package.json 文件
蓝色:修改,红色:安装
{ "name": "my-gulp-project", "version": "0.1.0", "private": true, "description": "Always a pleasure scaffolding your awesome static sites.", "keywords": [ "pages-boilerplate", "boilerplate", "pages", "zce" ], "homepage": "https://github.com/TheWomanLiketheWind/gulpAutomate#readme", "bugs": { "url": "https://github.com/TheWomanLiketheWind/gulpAutomate/issues" }, "repository": { "type": "git", "url": "git+https://github.com/TheWomanLiketheWind/gulpAutomate" }, "license": "MIT", "scripts": { "clean": "gulp clean", // 清除dist文件 "serve": "gulp serve", // 启动服务 "build": "gulp build", // 打包线上版本dist文件 "devlop": "gulp devlop", // 本地运行 }, "browserslist": [ "last 1 version", "> 1%", "maintained node versions", "not dead" ], "dependencies": { "bootstrap": "4.4.1", "jquery": "3.4.1", "popper.js": "1.16.1" }, "devDependencies": { "@babel/core": "^7.11.1", "@babel/preset-env": "^7.11.0", "browser-sync": "^2.26.12", "del": "^5.1.0", "gifsicle": "^5.1.0", "gulp": "^4.0.2", "gulp-babel": "^8.0.0", "gulp-clean-css": "^4.3.0", "gulp-htmlmin": "^5.0.1", "gulp-if": "^3.0.0", "gulp-imagemin": "^7.1.0", "gulp-load-plugins": "^2.0.3", "gulp-swig": "^0.9.1", "gulp-uglify": "^3.0.2", "gulp-useref": "^4.0.1"
"gulp-sass": "^4.1.0"
}, "engines": { "node": ">=6" } }