"这个项目太乱了,每个人都用不同的代码风格,部署也全靠手动..."一次代码评审会上,新来的技术专家直言不讳。作为前端负责人,我深感惭愧。随着团队从 3 人扩展到 15 人,我们的开发流程确实越来越混乱。
这不仅影响了开发效率,更容易引入各种问题。一次线上事故的根源就是因为某个环境变量在测试环境和生产环境不一致。经过团队讨论,我们决定系统性地进行工程化改造。
现状问题
首先梳理了当前存在的问题:
- 开发规范不统一,代码风格混乱
- 构建配置分散,难以维护
- 部署流程靠手动,容易出错
- 环境配置不规范,经常出问题
- 开发效率低,重复工作多
就像一个杂乱的工具间,虽然工具都在,但找起来特别费劲。我们需要好好整理一下这个工具间了。
工程化方案
项目脚手架
首先,我们开发了一个团队专用的项目脚手架:
typescript 代码解读复制代码// cli/create-app.ts
import { Command } from 'commander'
import { prompt } from 'inquirer'
import { create } from './creator'
const program = new Command()
program
.command('create ' )
.description('创建新项目')
.action(async name => {
// 收集项目配置
const answers = await prompt([
{
type: 'list',
name: 'template',
message: '选择项目模板:',
choices: ['react-admin', 'react-mobile', 'react-desktop']
},
{
type: 'checkbox',
name: 'features',
message: '选择需要的功能:',
choices: ['TypeScript', 'Tailwind CSS', 'Redux Toolkit', 'React Query', 'Jest']
}
])
// 创建项目
await create(name, answers)
})
program.parse(process.argv)
代码规范配置
然后是统一的代码规范配置:
typescript 代码解读复制代码// eslint.config.js
module.exports = {
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', 'prettier'],
plugins: ['@typescript-eslint', 'import'],
rules: {
'import/order': [
'error',
{
groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
'newlines-between': 'always',
alphabetize: { order: 'asc' }
}
],
'@typescript-eslint/explicit-module-boundary-types': 'off',
'react-hooks/exhaustive-deps': 'warn'
}
}
// prettier.config.js
module.exports = {
semi: false,
singleQuote: true,
trailingComma: 'none',
printWidth: 80,
tabWidth: 2,
bracketSpacing: true
}
构建配置
统一的构建配置也是必不可少的:
typescript 代码解读复制代码// build/webpack.base.ts
import { Configuration } from 'webpack'
import WebpackBar from 'webpackbar'
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'
const config: Configuration = {
module: {
rules: [
{
test: /\.(ts|tsx)$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'],
plugins: [['@babel/plugin-transform-runtime', { corejs: 3 }]]
}
}
]
},
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[name]__[local]___[hash:base64:5]'
}
}
},
'postcss-loader'
]
}
]
},
plugins: [new WebpackBar(), new ForkTsCheckerWebpackPlugin()],
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx'],
alias: {
'@': '/src'
}
}
}
export default config
自动化部署
最后是完整的自动化部署流程:
yaml 代码解读复制代码# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Type check
run: npm run type-check
- name: Test
run: npm test
- name: Build
run: npm run build
env:
NODE_ENV: production
- name: Deploy to staging
if: github.event_name == 'pull_request'
run: |
echo "Deploying to staging..."
npm run deploy:staging
- name: Deploy to production
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
echo "Deploying to production..."
npm run deploy:prod
开发工具链
为了提高开发效率,我们还开发了一些实用的工具:
typescript 代码解读复制代码// scripts/create-component.ts
import { prompt } from 'inquirer'
import { generateComponent } from './generators'
async function createComponent() {
const { name, type } = await prompt([
{
type: 'input',
name: 'name',
message: '组件名称:'
},
{
type: 'list',
name: 'type',
message: '组件类型:',
choices: ['Function', 'Class', 'HOC']
}
])
await generateComponent(name, type)
}
createComponent()
// scripts/analyze-bundle.ts
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
import webpack from 'webpack'
import config from '../webpack.config'
config.plugins.push(new BundleAnalyzerPlugin())
webpack(config, (err, stats) => {
if (err || stats.hasErrors()) {
console.error('构建失败:', err || stats.toString())
process.exit(1)
}
})
效果验证
经过两个月的改造,我们取得了显著的成效:
- 项目初始化时间从 2 天减少到 2 小时
- 代码提交到部署的时间从 1 天减少到 30 分钟
- 线上问题减少了 80%
- 开发效率提升了 50%
最让我印象深刻的是一位同事说:"现在写代码感觉特别顺畅,不用再操心那些繁琐的配置了。"
经验总结
前端工程化就像是给工厂装上自动化生产线,前期投入虽然大,但能大幅提升效率。我们的经验是:
规范先行 - 统一的规范是基础工具助力 - 合适的工具能事半功倍持续改进 - 工程化是持续演进的过程团队认同 - 最重要的是团队的认可和配合
写在最后
前端工程化不是一蹴而就的事情,而是需要团队持续投入和改进的过程。就像那句话说的:"工欲善其事,必先利其器。"好的工程化体系就是我们的利器。
有什么问题欢迎在评论区讨论,让我们一起探讨前端工程化的最佳实践!
如果觉得有帮助,别忘了点赞关注,我会继续分享更多实战经验~
评论记录:
回复评论: