require.ensure通过webpack打包后出现2个文件

发布于 2022-09-07 21:12:29 字数 886 浏览 23 评论 0

异步加载代码如下:

index.js :

require.ensure(['../mall/order'],function(require){
      var order = require('../mall/order');
  });
  
或者

require.ensure([],function(require){
      var order = require('../mall/order');
  });

order.js也没什么特殊的, 里面也同步引用了一些js

    var CryptoJS = require('crypto-js/core');
    require('crypto-js/aes');
    require('crypto-js/mode-ecb');
    require('crypto-js/pad-pkcs7');
    require('crypto-js/enc-utf8');
    require('crypto-js/enc-base64');
    var CollectionInfo = require('./collectInfo');
    require('./user');
    require('./address');
    var Order = {
        ...
    }
    module.exports = Order;

order.js打包后被拆成了2个js, 找不到原因


import也试过了, 也是把order.js拆成了2个js:

import('../mall/order').then(function(order){
      var order = order;
  });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不必了 2022-09-14 21:12:29

两个文件具体指哪两个文件?如果是类似 bundle.js 和 0.bundle.js 这种的话,这是正常的,0.bundle.js 就是指从主 bundle.js 分离出的需要懒加载的那个文件。


updated

uh...根据你更新的描述的话,有试过对每个 require.ensure 增加 chunkName 参数吗,就是它的最后一个参数,这样对于相同的懒加载逻辑形成的 bundle 都会被打包到同一个 chunk 中。我猜 order.js 被生成了两次是因为你没有指定 chunkName,这样 webpack 会将每次的懒加载逻辑当做不同的 chunk 来对待。

另外,dependencies 参数(也就是第一个参数)如果是模块本身并没有什么意义,如果没有什么必须执行的依赖模块,保留空就好。

最后,不知道你使用的 webpack 的版本是多少,require.ensure 这个方法官方已经建议弃用了,如果可能的话,还是建议使用新的 import() 方法。

以上,个人拙见,如有错误,还望见谅。

反差帅 2022-09-14 21:12:29

终于解决了, MinChunkSizePlugin这个插件可以解决

new webpack.optimize.MinChunkSizePlugin({
  minChunkSize: 102400
});

order.js被打包成了2个文件, 然后把2个文件的体积加起来的值 , 给到minChunkSize(适当加大一点),就可以了.

就是当体积小于这个值时, 就不会新建chunk .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文