Skip to content
This repository was archived by the owner on Apr 14, 2022. It is now read-only.

seognil/webpack-playground

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deprecated,别学了,直接用 vite


Webpack 从零开始

Webpack 对于现代前端开发来说是一个必不可少的工具。无论你是主动配置,还是被动地通过 CLI 调用。如果你想使用 ES6、TypeScript、JSX 等新技术,你的项目中总是会有它。

Webpack 虽然很强大,但是想要用好它并不是一件轻松的事情。它的难点不是说理解原理和机制有多么的复杂,而在于如何编写配置。究其原因,在于文档庞杂,部分文档语焉不详,以及不同的配置项、插件可能会互相影响。

本 Repo 的目的,便是总结一些 Webpack 配置上的实践经验。以便后来人在学习使用 Webpack 的过程中可以少走一些弯路。通过可运行的 Demo,循序渐进地学习使用 Webpack 解决项目打包的具体需求。

所有示例在 demo/ 文件夹中,包含可运行的配置和代码,以及 readme。
不定期更新版本并重构

  • TODO
    • Webpack
      • 提高编译速度
  • TODO
    • alias
    • 编写 custom plugin

补充

如果你要为团队实现可配置的打包工作。
可能会有这些注意点。

  • 打包任务可以从命令行调用,也可以通过 JS 代码参数化调用。
  • createWebpackConfig(options)
    • 为实现批量打包,可以设计带参数的配置生成函数,而不直接通过 argv 读取命令行参数。
  • simpleBundler(input, output, opts)
    • 除了为整个项目打包,也可以写一个简单编译函数,诸如老项目中的局部代码库文件,支持编译 JS 和 CSS。
  • hashBurner(templates, patterns)
    • 如果在你们的项目中,HTML 页面来源于 Django、Spring 等后端框架管理的非标准 HTML 文件,你可能需要手动处理模板中的资源引用路径(build 之后带了 hash)。(可能 HtmlWebpackPlugin 等插件无法满足需求)
  • Log 信息
    • 打包所涉及的所有资源路径(用于项目清理分析)
    • 打包时间,当前配置(mode、watch 等),输入输出路径等友好的信息。
  • 给其他开发人员设计的编译可选项
    • slient,批量编译的时候你应该不希望 console 疯狂输出太多信息
    • hash,是否给输出文件添加 hash
    • polyfill,对于 JS 是转义诸如 [].flat 这样的 API,对于 CSS 是 autoprefixer 功能
    • clean,模糊检测以前的打包文件并清除,比如文件名相同但 hash 不同。(和 CleanWebpackPlugin 区别开,只清除相关文件,并非清空整个目录)
  • 运行环境的支持
    • 支持运行 TypeScript 编写的脚本:Webpack、Babel、Jest 等
    • 项目和脚本的 tsconfig、babel.config 等可以区别开。(毕竟项目可能要兼容 IE,但是跑编译任务应该不用)
    • Alias 统一化,从 tsconfig.json 中读取 paths 字段(路径映射配置项),转义成 Webpack、Babel、Jest 等不同工具支持的 alias 字段。拒绝到处复制粘贴。
    • 你编写脚本的代码可能也用了高级语法(比如可选链),如果你的部署环境是诸如 Node 10 等老版本,你可能还是需要 babel-node(语法 + Polyfill)
  • 有这么多技术需求,要注意管理项目的文件夹结构,可以建一个 scripts/ 文件夹

关于这些话题,我以后有机会另写文章详细展开。

参考资料

Releases

No releases published

Packages

No packages published