使用gulp + webpack搭建前端工作流
npm install easy-webflow --save-dev
创建gulpfile.js
文件
// gulpfile.js
require('easy-webflow');
创建配置文件webflow.config.js
,可配置项参考npm包内的config/index.js
和 gulpfile.js/default-config.js
也可以选择不执行默认的任务,加载 gulpfile.js/lib
目录下的工具方法执行自定义任务,下面是一个自定义任务的例子(监听文件变动,执行编辑、上传ftp等任务)
// webflow.config.js
const path = require('path');
const _ = require('lodash');
const { Server, browserSync } = require('easy-webflow/gulpfile.js/lib/server');
const { sftp } = require('easy-webflow/gulpfile.js/lib/sftp');
const { sass } = require('easy-webflow/gulpfile.js/lib/sass');
const { jsmin } = require('easy-webflow/gulpfile.js/lib/webpack');
const handle = (_path, config) => {
const exname = path.extname(_path);
switch (exname) {
case '.scss':
sass(_path, 'www/css', {
src: {
base: 'www/sass'
}
});
break;
case '.js':
jsmin(_path, 'www/dest', {
src: {
base: 'www/js'
}
});
break;
default:
break;
}
sftp(_path, config.sftp);
};
const base = {
useDefault: false,
host: 'abc.com',
port: 80,
sftp: {
host: '127.0.0.1',
user: 'root',
pass: '',
port: 22,
remotePath: '/root/abc'
},
browsersync: {
files: [
'www/**/*',
'abc/**/*'
],
server: {
baseDir: './'
},
notProxyUrls: [
'/www'
]
},
before (config, cb) {
const server = new Server(config);
server.init();
cb();
},
watch: {
globs: [
'www/**/*',
'abc/**/*'
],
cb (watcher, config) {
watcher.on('add', (path) => {
console.log('添加文件', path);
handle(path, config);
});
watcher.on('unlink', (path) => {
console.log('删除文件', path);
});
watcher.on('change', (path) => {
console.log('更改文件', path);
handle(path, config);
});
}
}
}
const config = {
development: _.merge(base, {
}),
production: _.merge(base, {
})
};
module.exports = config;
在package.json
文件的scripts
添加以下代码,使用--config
指定自定义配置文件地址
"dev": "cross-env NODE_ENV=development gulp --config webflow.config.js",
"prod": "cross-env NODE_ENV=production gulp --config webflow.config.js"
开发环境(默认任务行为)
启动开发服务,监听sass、es6并刷新浏览器
npm run dev
生产环境(默认任务行为)
将所有资源打包压缩优化后到dist目录,dist目录作为发布在生产环境资源
npm run prod
- sass => css
- es6|7 => js
- typescript => js
- css stylelint
- js lint,不支持自定义配置(未测试包使用有没有问题)
- html lint(暂无)
- 开发服务器、自动重载、动态插入样式 Browsersync
- 根据配置文件启动开发服务或者构建生产环境资源
- 禁用默认任务,执行自定义任务,比如监控文件改变执行编译或者上传ftp
|-- app 源代码目录
|-- public 前端资源目录
|-- css sass输出目录,sprite.css为雪碧图css
|-- fonts 字体
|-- images 图片资源
|-- js es6+编译后输出目录
|-- lib 第三方css\js等不能使用npm管理的包
|-- scripts es6源码,每个文件对应输出一个js文件(存在重复模块包装代码)
|-- styles 样式文件目录,不以下划线开头输出一个单独的文件
|-- router 后端路由
|-- views 后端视图(pug)
|-- app.js 入口文件
|-- config.js 后端配置文件
|-- config gulp自定义配置文件
|-- gulpfile.js gulp任务目录
|-- lib gulp任务共用方法
|-- tasks 具体任务(default.js默认任务依赖其他任务,故改名为z_开头以保证最后加载)
|-- default-config.js 默认使用的配置,和config文件夹的配置合并传给任务
|-- index.js gulp入口文件
|-- dist 构建后的代码目录,用于生产环境(前后端),目录结构同app一样
- jquery
- bootstrap
- vue
- ...
- nodejs8.0+
- pug
- koa2
- koa2-router
- koa2-views
LGPL