首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

前端工程化实战:从项目初始化到自动化部署

  • 24-12-16 12:05
  • 4543
  • 8754
juejin.cn

"这个项目太乱了,每个人都用不同的代码风格,部署也全靠手动..."一次代码评审会上,新来的技术专家直言不讳。作为前端负责人,我深感惭愧。随着团队从 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%

最让我印象深刻的是一位同事说:"现在写代码感觉特别顺畅,不用再操心那些繁琐的配置了。"

经验总结

前端工程化就像是给工厂装上自动化生产线,前期投入虽然大,但能大幅提升效率。我们的经验是:

规范先行 - 统一的规范是基础工具助力 - 合适的工具能事半功倍持续改进 - 工程化是持续演进的过程团队认同 - 最重要的是团队的认可和配合

写在最后

前端工程化不是一蹴而就的事情,而是需要团队持续投入和改进的过程。就像那句话说的:"工欲善其事,必先利其器。"好的工程化体系就是我们的利器。

有什么问题欢迎在评论区讨论,让我们一起探讨前端工程化的最佳实践!

如果觉得有帮助,别忘了点赞关注,我会继续分享更多实战经验~

注:本文转载自juejin.cn的远洋录的文章"https://juejin.cn/post/7448261376896417826"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

104
前端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top