📒 Vite 3.0 正式版发布
https://vitejs.dev/blog/announcing-vite3.html#dev-improvements
📒 nestjs + prisma 开发全栈项目
https://www.prisma.io/docs/getting-started
📒 还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS!
📒 【面试造火箭,入职拧螺丝】万字详解如何从0开始手写一个Promise
📒 Webpack 特有的优化策略
由于 Webpack 出现的时候,还没有 ESM 规范,所以 Webpack 底层根据 CJS 规范实现 __webpack_require__
加载模块,这就导致 Webpack 打包会出现大量模板代码,增加打包后体积。相比之下,Rollup 基于 ESM 规范打包,产物代码就很干净。
1. Scope Hoisting
即 作用域提升
,个人觉得这个应该是参考了 Rollup,但是 Webpack 的模块合并还是非常有限,必须是只引用了一次的模块才能合并,否则会造成模块冗余问题。
默认 optimization.concatenateModules
在生产环境下会启用:
module.exports = {
//...
optimization: {
concatenateModules: true,
},
};
https://webpack.docschina.org/plugins/module-concatenation-plugin/
2. 确定性模块 ID
生产环境下,Webpack 的模块 ID 默认按模块解析顺序自增,即使源码没有修改,但是有时模块 ID 会发生变化,导致哈希改变,文件缓存失效。通过配置 moduleIds: 'deterministic'
有利于持久化缓存:
module.exports = {
//...
optimization: {
moduleIds: 'deterministic',
},
};
https://webpack.docschina.org/configuration/optimization/#optimizationmoduleids
3. Runtime Chunk
运行时代码单独分包,一般 SPA 应用问题不大,多页应用打包,运行时代码单独分包可以配置持久化缓存。配置 runtimeChunk: 'multiple'
会为每一个 Initial Chunk 添加一个 Runtime Chunk,配置 runtimeChunk: 'single'
则会创建一个所有 Initial Chunk 共享的 Runtime Chunk:
module.exports = {
//...
optimization: {
runtimeChunk: {
name: 'runtime',
},
},
};
https://webpack.docschina.org/configuration/optimization/#optimizationruntimechunk
⭐️ ⭐️ 「React 进阶」 React 全部 Hooks 使用大全 (包含 React v18 版本 )
⭐️ ⭐️ 函数式编程术语