thread-loader多进程打包+enternals忽略打包+dll动态链接

当js代码用babel处理兼容性且本身代码就比较多的情况下可以使用thread-loader开启多线程打包

thread-loader本身启动进程就需要耗费时间, 所以当js代码不多时就不要开启, 否则还可能会延长打包时间

{
  // 当js代码用babel处理兼容性且本身代码就比较多的情况下可以使用thread-loader开启多线程打包
  // thread-loader本身启动进程就需要耗费时间, 所以当js代码不多时就不要开启, 否则还可能会延长打包时间
  test: '/\.js$/',
  exclude: /node_modules/,
  use: [
    {
      loader: 'thread-loader',
      options: {
        // 默认是cpu核 - 1, 可以通过这里更改开启几个进程
        works: 2
      }
    },
    {
      loader: 'babel-loader',
      options: {
        presets: [
          [
            '@babel/preset-env',
            {
              useBuiltIns: 'usage',
              corejs: {
                version: 3
              },
              targets: {
                chrome: '60'
              }
            }
          ]
        ]
      }
    }
  ]

}

配置externals来忽略哪些文件不需要打包

忽略打包后需要在index.html中手动引入, 可以引入静态资源或者cdn链接

 externals: {
    jQuery: 'jquery'
  },

除了忽略打包手动引入外还可以使用dll来对第三方库实现一次打包放入一个单独文件夹, 后续打包不参与, 并且自动引入html

需要配置webpack.dll.js来对那些单独打包的文件进行处理, 该文件夹里会生成打包后的文件和一个映射文件

源文件的打包配置里使用这个映射文件确定哪些不需要打包即可

启动指令为webpack —config 文件名, 配置如下

// 该文件运行一次是为了打包那些处理过的第三方库, 例如react或者jquery这种自己不会修改的代码
// 启动指令为webapck --config 该文件名
// 和webpack里打包设置相似但不完全一致, 比如下面的文件入口属性值只能是数组
const { resolve } = require('path')
const webpack = require('webpack')
module.exports = {
  entry: {
    jquery: ['jquery']
  },
  output: {
    // 不能使用contenthash或者其他hash, 不然动态添加到html中引入不知道文件名是什么
    filename: '[name].js',
    // 注意不能也生成到了build打包后的文件夹了, 那里每次打包都要重新生成的
    // 要独立于webpack打包后的文件夹
    path: resolve(__dirname, 'dll'),
    // 打包后向外暴露一个对象, 注意不是文件,不能带后缀, 即export [name]
    library: '[name]_[hash]'
  },
  plugins: [
    // 借助webpack的DllPlugin生成一个映射, 源文件打包后根据这个映射找到提前已经打包好的文件
    // 生成一个manifest.json
    new webpack.DllPlugin({
      // 映射要找的暴露的内容
      name: '[name]_[hash]',
      // 生成的映射文件名, 在源文件打包时使用该映射即可
      path: resolve(__dirname, 'dll/manifest.json')
    })
  ],
  mode: 'production',
}

webapck.config.js

// 该插件的作用是将配置项里的文件引入到html头部
const AddAssetHtmlWebpackPlugin = require('add-asset-html-webpack-plugin')

plugins: [
  // 源文件打包时参照映射表, 表中有的就不打包
  new webpack.DllReferencePlugin({
    manifest: resolve(__dirname, 'dll/manifest.json')
  }),
  // 使用该插件将上面忽略掉不打包的文件自动添加到html头部
  new AddAssetHtmlWebpackPlugin({
    filepath: resolve(__dirname, 'dll/jquery.js')
  })
]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值