[学习笔记] 工程化的浅入了解

本文基于抖音"哲玄前端", 《全栈实践课》,引擎内核实现章节所写。

前端工程化

前端工程化不是单纯引入工具,而是通过规范、流程和架构设计,构建可持续发展的前端体系。其核心在于平衡效率与质量,适应业务快速增长的同时,保障代码的长期可维护性。开发者需持续关注工具演进,但避免盲目追逐新技术,而是根据团队规模与项目阶段选择合适方案。------------ DeepSeek

多页面构建

  Elpis 最终的成品为一个类似轻代码的平台,所需支持多个页面的合成打包,以达到支持多个界面提供给客户自行选择组合,所以就需要多个模板页面多个入口进行打包,然而通过glob可以动态构造以及渲染。

js 复制代码
// 动态构造 pageEntries htmlWebpackPluginList
const pageEntries = {};
const htmlWebpackPluginList = [];
// 获取 app/pages 目录下所有入口文件 {entry.xx.js}
const entryList = path.resolve(process.cwd(), './app/pages/**/entry.*.js');
glob.sync(entryList).forEach(file => {
    const entryName = path.basename(file, '.js');
    // 构造 entry
    pageEntries[entryName] = file; 
    // 构造最终渲染的页面
    htmlWebpackPluginList.push(
        // html-webpack-plugin 辅助注入打包后的 bundle 文件到 tpl 文件中
        new HtmlWebpackPlugin({
            // 产物 (最终模板) 输出路径
            filename: path.resolve(process.cwd(), './app/public/dist/', `${entryName}.tpl`),
            // 指定要使用的模板文件
            template: path.resolve(process.cwd(), './app/view/entry.tpl'),
            // 要注入的代码块
            chunks: [ entryName ],
        })
    );
})

分包策略

  首先说一下为什么需要进行分包,在前端需求的日益庞大下,文件也不断激增更因为Elpis最终的目标为一个多入口的前端页面,所以在项目的前期更加需要通过分包,可以将应用程序的代码拆分成多个较小的包,按需加载所需的代码,从而减少初始加载时间,提高应用的响应速度和用户体验。

js 复制代码
    // 配置打包输出优化 (配置代码分割,模块合并,缓存,TreeShaing,压缩等优化策略)
    optimization: {
        splitChunks: {
            chunks: 'all', // 对同步和异步模块都进行分割
            maxAsyncRequests: 10, // 每次异步加载的最大并行请求数
            maxInitialRequests: 10, // 入口点的最大并行请求数
            cacheGroups: {
                vendor: { // 第三方依赖库
                    test: /[\\/]node_modules[\\/]/, // 打包 node_modules 中的文件
                    name: 'vendor', // 模块名称
                    priority: 20, // 优先级,数字越大,优先级越高
                    enforce: true, // 强制执行
                    reuseExistingChunk: true, // 复用已有的公共 chunk
                },
                common: { // 公共模块
                    name: 'common', // 模块名称
                    minChunks: 2, // 被两处引用即被归为公共模块
                    minSize: 1, // 最小分割文件大小 (1 byte)
                    priority: 10, // 优先级
                    reuseExistingChunk: true, // 复用已有的公共 chunk
                }
            }
        },
        // 将 webpack 运行时生成的代码打包到 runtime.js
        runtimeChunk: true
    },

热更新

  以上两点都是为了项目以及提高客户体验做准备,这一点就是为了开发者可以更便捷开发了。

  • 引入 webpack-dev-middleware 监控文件的改动;
  • 引入webpack-hot-middleware 将改动的效果第一时间反馈到页面上;
  • 可以使应用程序一直保持运行状态;
相关推荐
奕鼎竜瑆2 小时前
Solid 前端响应式开发从零到精通
前端·人工智能
动恰客流统计2 小时前
景区客流统计怎么做?兼顾管控与运营的实施方案解析
大数据·前端·人工智能
派小心.3 小时前
A/B测试工具免费版够用吗?
前端·数据分析
前端snow3 小时前
ai agent --- redis 缓存
前端
duanshu_4 小时前
官网表单与下载异常怎么排查?五个环节定位故障
前端·自动化·flyweight
Zhou1411364 小时前
SpringBoot_03_Web开发
前端·spring boot·python
辻弋2014 小时前
【无标题】
大数据·服务器·前端·搜索引擎·开源软件
FluxArt5 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
搬砖的小码农_Sky6 小时前
AI Agent:Windows上Node.js安装后 npm -v报错
前端·npm·node.js·人机交互
计算机魔术师6 小时前
半年翻倍!OpenAI再融300亿,估值冲到1.4万亿
前端