整体架构
- 分工:利用Webpack强大的模块打包能力处理复杂的模块依赖和代码转换,例如处理JavaScript、CSS、图片等各种资源的打包。使用Gulp专注于自动化任务,如文件的复制、清理、优化等,利用其简单的流式操作特性提升任务执行效率。
- 分层构建:分为基础层构建和业务层构建。基础层构建用于处理公共模块、框架等,业务层构建基于基础层进行各个业务模块的构建。
各环节实现方式
Webpack部分
- 模块解析:通过
webpack.config.js
配置resolve
字段,优化模块解析路径,减少查找时间。例如:
resolve: {
alias: {
'@components': path.resolve(__dirname, 'src/components'),
'@utils': path.resolve(__dirname, 'src/utils')
}
}
- 代码转换:使用
babel-loader
处理ES6+代码转换为ES5,确保浏览器兼容性。配置如下:
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset - env']
}
}
}
]
}
- 资源处理:对于CSS,使用
style - loader
和css - loader
,对于图片等资源,使用file - loader
或url - loader
。例如:
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.(png|jpg|gif)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192
}
}
]
}
- 优化构建:启用代码压缩,使用
terser - webpack - plugin
压缩JavaScript代码,OptimizeCSSAssetsPlugin
压缩CSS代码。
const TerserPlugin = require('terser - webpack - plugin');
const OptimizeCSSAssetsPlugin = require('OptimizeCSSAssetsPlugin');
module.exports = {
optimization: {
minimizer: [
new TerserPlugin(),
new OptimizeCSSAssetsPlugin({})
]
}
}
Gulp部分
- 文件清理:使用
gulp - clean
插件,在构建前清理输出目录,确保构建的干净环境。例如:
const clean = require('gulp - clean');
gulp.task('clean', function () {
return gulp.src('dist', {read: false})
.pipe(clean());
});
- 文件复制:使用
gulp - copy
插件,将不需要处理的静态文件(如HTML模板)复制到输出目录。
const copy = require('gulp - copy');
gulp.task('copy:html', function () {
return gulp.src('src/*.html')
.pipe(copy('dist'));
});
- 优化任务:例如使用
gulp - imagemin
对图片进行优化压缩。
const imagemin = require('gulp - imagemin');
gulp.task('imagemin', function () {
return gulp.src('src/images/*')
.pipe(imagemin())
.pipe(gulp.dest('dist/images'));
});
与团队协作流程相结合
- 代码规范:制定统一的代码规范,如ESLint配置用于JavaScript代码检查,Stylelint用于CSS代码检查。在构建脚本中集成这些检查,确保每次构建前代码符合规范。
- 版本控制:使用Git进行版本控制,通过Git Hooks在代码提交或推送前触发构建和检查任务。例如,在
.git/hooks/pre - commit
文件中添加脚本,执行gulp lint && webpack --config webpack.config.js
等操作,确保提交的代码是经过构建和检查的。
- 持续集成:将构建脚本集成到CI/CD系统(如Jenkins、GitLab CI/CD)中。每次代码合并到主分支或特定分支时,自动触发构建流程,确保构建过程的稳定和可重复。
- 文档管理:团队共同维护构建相关的文档,包括构建流程说明、环境配置等,方便新成员快速上手,确保整个构建过程的高效与稳定。