webpack相关记录

webpack import文件后缀搜索

    resolve: {
        extensions: ['.js', '.vue', '.ts', '.tsx'],
    },
1
2
3

webpack之splitChunks

  • module:就是js的模块化webpack支持commonJS、ES6等模块化规范,简单来说就是你通过import语句引入的代码。
  • chunk: chunk是webpack根据功能拆分出来的,包含三种情况:
    • 你的项目入口(entry)
    • 通过import()动态引入的代码
    • 通过splitChunks拆分出来的代码
  • chunk包含着module,可能是一对多也可能是一对一。
 splitChunks: {
     cacheGroups:{
          staticJS: {
              name: 'staticJS', // split UI into a single package
              priority: 30,
              test: /wangdapantest/,
              minSize: 0,
              // test: (module) => {
              //     return module?.resource?.includes("wangdapantest");
              // },
              chunks: 'async',
          }
    }
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14

提示

如果代码量太少 需要设置minSize 否则webpack可能不会拆出来新的文件

  • initial 入口文件头部import引入的js如果设置了 splitChunks.cacheGroups规则 那么他的输出名字是 staticJS.js 也就是filename

    • 入口文件(app)->A->B 不管是在A 还是在 B import的js(例如static)文件 如果拆出来 都是filename 而不是chunkfilename
  • async入口文件或者入口文件import的js 里有 import("static") 的js文件 那么 static就是解析出来的chunk文件 也就是chunkfilename (static.[hash].chunk.js)

    • async 模式下拆出来的文件都是chunkfilename
  • all 不管是从什么地方引入的都可以打包 如果入口文件引入了 那就是filename输出 如果是异步引入的js引入的 那就是thunk文件 也就是chunkfilename

webpack之stats

    stats: {

       entrypoints:true,
       assets:true,
       assetsSpace:100000,

       chunks:true,
       chunkOrigins:true,
   },
1
2
3
4
5
6
7
8
9

tree-shaking

告诉编译器当前函数调用不会产生副作用

import {foo} from './utils'
/*#__PURE__*/ foo()
1
2
上次更新: 2023/1/18 07:01:59
贡献者: wangdapan