前端工程化实践指南
- Published on
前端工程化实践指南
一、工程化概述
前端工程化是现代前端开发中不可或缺的一环,它主要解决以下问题:
开发效率问题
- 重复性工作多
- 开发环境配置复杂
- 代码质量难以保证
协作问题
- 代码风格不统一
- 分支管理混乱
- 代码审查效率低
部署问题
- 构建流程不规范
- 发布流程不透明
- 回滚机制不完善
二、工程化解决方案
1. 项目初始化
// 项目脚手架
const createProject = async (options) => {
const { name, template, features } = options;
// 1. 创建项目目录
await fs.mkdir(name, { recursive: true });
// 2. 复制模板文件
await copyTemplate(template, name);
// 3. 安装依赖
await installDependencies(name, features);
// 4. 初始化 Git
await initGit(name);
// 5. 生成配置文件
await generateConfig(name, features);
};
// 使用示例
createProject({
name: 'my-project',
template: 'react-ts',
features: ['eslint', 'prettier', 'husky']
});
2. 代码规范
// ESLint 配置
module.exports = {
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react/recommended'
],
rules: {
'react/prop-types': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off'
},
settings: {
react: {
version: 'detect'
}
}
};
// Prettier 配置
module.exports = {
semi: true,
singleQuote: true,
tabWidth: 2,
trailingComma: 'es5'
};
3. Git 工作流
# Git Hooks 配置
#!/bin/sh
# pre-commit
# 运行 ESLint
npm run lint
# 运行测试
npm test
# 检查提交信息格式
commit_msg=$(cat $1)
if ! echo "$commit_msg" | grep -qE "^(feat|fix|docs|style|refactor|test|chore)\(.*\): .{1,50}"; then
echo "提交信息格式错误,请使用:type(scope): subject"
exit 1
fi
4. 构建流程
// 构建脚本
const build = async () => {
// 1. 清理构建目录
await clean();
// 2. 检查代码
await lint();
// 3. 运行测试
await test();
// 4. 构建资源
await buildAssets();
// 5. 生成版本信息
await generateVersion();
// 6. 上传 CDN
await uploadCDN();
};
// 发布脚本
const publish = async () => {
// 1. 检查分支
await checkBranch();
// 2. 更新版本号
await updateVersion();
// 3. 生成变更日志
await generateChangelog();
// 4. 提交代码
await commitChanges();
// 5. 打标签
await createTag();
// 6. 推送到远程
await pushToRemote();
};
三、自动化工具
1. CI/CD 配置
# GitHub Actions 配置
name: CI/CD
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build
run: npm run build
- name: Deploy
if: github.ref == 'refs/heads/main'
run: npm run deploy
2. 监控告警
// 监控配置
const monitor = {
// 性能监控
performance: {
collect: () => {
const timing = performance.timing;
return {
dns: timing.domainLookupEnd - timing.domainLookupStart,
tcp: timing.connectEnd - timing.connectStart,
request: timing.responseEnd - timing.requestStart,
dom: timing.domComplete - timing.domLoading,
load: timing.loadEventEnd - timing.navigationStart
};
}
},
// 错误监控
error: {
collect: (error) => {
return {
message: error.message,
stack: error.stack,
url: window.location.href,
timestamp: new Date().toISOString()
};
}
}
};
四、最佳实践
开发规范
- 统一的代码风格
- 完善的注释文档
- 清晰的目录结构
构建优化
- 合理的缓存策略
- 优化的资源加载
- 完善的错误处理
部署流程
- 自动化的构建部署
- 完善的回滚机制
- 清晰的版本管理
监控告警
- 实时的性能监控
- 完善的错误收集
- 及时的告警通知
五、总结
通过实施前端工程化,我们实现了:
- 开发效率提升 50%
- 代码质量显著提高
- 部署流程更加规范
- 问题定位更加快速
这些改进不仅提升了团队协作效率,也为项目的可持续发展提供了保障。
js
// .eslintrc.js
module.exports = {
extends: ['eslint:recommended', 'plugin:vue/essential'],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
}
};
// package.json
{
"scripts": {
"lint": "eslint --ext .js,.vue src",
"test": "jest",
"build": "webpack --config webpack.prod.js"
}
}