webpack4+动态导入(按需加载方式)

此文为复习或升级webpack过程中的总结。webpack版本为4.29.5

webpack4+动态导入;

  • 目的:减少包体积,按需加载。常见使用情况有以下3中

1:使用import()的情况

 output: {
        filename: "bundle.js",
        chunkFilename: '[name].[hash:8].js',
        path: path.resolve(__dirname, "dist/js"),
    }
复制代码

动态导入时chunkFilename默认情况是数字,0,1....;当我们动态引入import("lodash")的时候;如果想要知道打包以后的文件是lodash而不是0.js,只需要在导入的时候加注释:这样打包的时候就会就会将注释中的webpackChunkName的值替换[name],具体详情参考文档:dynamic-imports

import(/* webpackPrefetch: true,webpackChunkName: "yourFileName",webpackPreload: true */ 'LoginModal')
import ( /* webpackChunkName: "yourFileName" */ filePath);
import ( /* webpackChunkName: "lodash" */ 'lodash').then(({
        default: _
    }) => {
        console.log(_)
    }).catch(error => 'An error occurred while loading the component');
复制代码

2:使用require.ensure(dependencies: String[], callback: function(require),errcallback:function(err), chunkName: String);

//将A单独打包
require.ensure([],()=>{
    require(A)
},"bundleA");
//将A,B打包到一起,而且从主文件束中拆分出来。但只有 b.js 的内容被执行。a.js //的内容仅仅是可被使用,但并没有被输出。
//想去执行 a.js,我们需要异步地引用它,如 require(‘./a.js’),让它的 JavaScritp 被执行。
require.ensure([A],()=>{
    require(B)
},bundleAB)
复制代码

3:使用bundle-loader

output配置
  output: {
        filename: "js/[name].[hash:8].js",
        chunkFilename: 'js/[name].[hash:8].js',
        path: path.resolve(__dirname, "./dist"),
        // publicPath: "./"
    },


复制代码
当name:"[name]"时默认会将所有符合条件的文件单独打包,例如:
webpack.module.rules配置如下
   {
                test: /\.bundle(\.js|\.css)$/,
                use: {
                    loader: "bundle-loader",
                    options: {
                        lazy: true,
                        name: "[name]"
                    }
                }
            }
复制代码
index.js
import bundle from './agg.bundle.js';
import bundle2 from '@/bgg.bundle.js';
复制代码

会打包出来两个文件,文件名为文件名+此次打包的hash;

当name:string时
webpack.module.rules配置如下
   {
                test: /\.bundle(\.js|\.css)$/,
                use: {
                    loader: "bundle-loader",
                    options: {
                        lazy: true,
                        name: "my-chunk"
                    }
                }
            }
复制代码
index.js
import bundle from './agg.bundle.js';
import bundle2 from '@/bgg.bundle.js';
复制代码

会将所有符合条件的文件打包成一个包,包名为my-chunk+此次打包的hash;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值