新搭了一套前端开发代码框架,使用Typescript。
webpack相关配置如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | {test: /\.(j|t)sx?$/,
 loader: 'ts-loader',
 include: SRC_PATH,
 options: {
 transpileOnly: true, //只转译,不检查
 getCustomTransformers: () => ({
 //获取或者说定义自定义的转换器
 before: [
 tsImportPluginFactory({
 libraryName: 'antd', //对哪个模块进行按需加载
 libraryDirectory: 'es', //按需加载的模块,如果实现按需加载,必须是ES Modules
 style: 'css' //自动引入它对应的CSS
 })
 ]
 }),
 compilerOptions: {
 module: 'es2015'
 }
 }
 }
 
 | 
使用ts-loader来进行ts的相关编译工作。
然后打包的时候我疯了。。

现在代码量并不大,只是引了一个我们自己的组件库 47638ms有些太夸张。必须进行优化!
1.使用babel-loader替代ts-loader
babel7中有包来解析ts,安装
| 1
 | "@babel/preset-typescript": "^7.9.0",
 | 
使用的.babelrc如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | {"presets": [
 [
 "@babel/preset-env",
 {
 "corejs": 3,
 "useBuiltIns": "usage"
 }
 ],
 "@babel/preset-typescript",  //解析ts
 "@babel/preset-react"
 ],
 "plugins": [
 "@babel/plugin-transform-runtime",
 [
 "@babel/plugin-proposal-decorators",
 {
 "legacy": true
 }
 ],
 [
 "@babel/plugin-proposal-class-properties",
 {
 "loose": true
 }
 ],
 "@babel/plugin-syntax-dynamic-import",
 ]
 }
 
 | 
webpack配置 修改为
| 12
 3
 4
 5
 
 | {test: /\.(j|t)sx?$/,
 include: SRC_PATH,
 loader: 'babel-loader'
 },
 
 | 

打包时间降为15015ms,打包速度加快了70%.
2.使用happypack
Webpack是允许在NodeJS中的,它是单线程模型的,因此webpack在构建文件时,比如js,css,图片及字体时,它需要一个一个去解析和编译,不能同时处理多个任务。特别当文件数量变多后,webpack构建慢的问题会显得更为严重。因此HappyPack出现了,它能让webpack同时处理多个任务,它将任务分解给多个子进程去并发执行,子进程处理完成后再将结果发送给主进程中。
HappyPack的基本原理:在webpack构建过程中,我们需要使用Loader对js,css,图片,字体等文件做转换操作,并且转换的文件数据量也是非常大的,且这些转换操作不能并发处理文件,而是需要一个个文件进行处理,HappyPack的基本原理是将这部分任务分解到多个子进程中去并行处理,子进程处理完成后把结果发送到主进程中,从而减少总的构建时间。
安装
webpack相关配置
引入
| 12
 3
 
 | const HappyPack = require('happypack');
 const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });
 
 | 
| 12
 3
 4
 5
 6
 
 | rules:{
 test: /\.(j|t)sx?$/,
 include: SRC_PATH,
 use: ['happypack/loader?id=babel']  //id为plugin中配置的 HappyPack的id
 },
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 
 | plugin: new HappyPack({
 id: 'babel',
 loaders: [{
 loader: 'babel-loader?cacheDirectory'
 }],
 threadPool: happyThreadPool
 }),
 
 | 

打包时间减少了1s左右,优化的不是那么明显,因为项目中现在文件数量还较少。
参考Bumblebee-react
持续更新,未完待续。。。