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

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

前端工程化

前端工程化不是单纯引入工具,而是通过规范、流程和架构设计,构建可持续发展的前端体系。其核心在于平衡效率与质量,适应业务快速增长的同时,保障代码的长期可维护性。开发者需持续关注工具演进,但避免盲目追逐新技术,而是根据团队规模与项目阶段选择合适方案。------------ 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 将改动的效果第一时间反馈到页面上;
  • 可以使应用程序一直保持运行状态;
相关推荐
excel1 分钟前
webpack 核心编译器 七 节
前端
一只月月鸟呀8 分钟前
HTML中数字和字母不换行显示
前端·html·css3
天下代码客29 分钟前
【八股】介绍Promise(ES6引入)
前端·ecmascript·es6
lb291742 分钟前
CSS 3D变换,transform:translateZ()
前端·css·3d
啊阿狸不会拉杆1 小时前
第二十二章:Python-NLTK库:自然语言处理
前端·python·自然语言处理
萧寂1731 小时前
html实现手势密码
前端·css·html
excel1 小时前
webpack 核心编译器 八 节
前端
JoyZ1 小时前
AI的时代学习还有意义吗?
前端
好_快1 小时前
Lodash源码阅读-getSymbolsIn
前端·javascript·源码阅读