账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    代码分割与懒加载情况下(code-splitting+lazyload)如何抽离公用模块代码?
    40
    0

    问题背景

    我知道,通过CommonsChunkPlugin 可以将 entry 的入口文件中引用多次的文件抽离打包成一个公用文件,从而减少代码重复冗余

        entry: {
            main: './src/main.js',
            user: './src/user.js'
        },
        ......
        new webpack.optimize.CommonsChunkPlugin({
            name: "commons",
            filename: 'common.js',
            minChunks: 2,
        })
        
        // 打包生成一个文件common.js ,包含main.js 和 user.js 中引用两次及以上的模块代码

    那么当我使用了 vue-router 代码分割 懒加载的时候,每个路由对应的.vue文件中,共同引用了多次的模块,怎么自动抽离出来。

    问题描述

    懒加载路由文件

    const
        Index = () => import(/* webpackChunkName: "index" */ "page/index/Index.vue"),
        User = () => import(/* webpackChunkName: "userIndex" */ "page/user/Index.vue"),
        UserDetail = () => import(/* webpackChunkName: "userDetail" */ "page/user/Detail.vue"),
        ...
    // page/index/Index.vue 首页路由文件
    <template>首页</template>
    <script>
        import pub from 'script/public'
        ...
    </script>
    
    // 用户页
    // page/index/Index.vue 用户页路由文件
    <template>用户页</template>
    <script>
        import pub from 'script/public'
        ...
    </script>

    上述使用了vue-router懒加载打包出来的 首页路由文件index.js 和 用户页文件userIndex.js 都会包含一份 public.js的代码,重复了。

    我的问题就是,在代码分割的代码中,怎么自动抽离公共代码? 就像CommonsChunkPlugin的效果一样,或者说CommonsChunkPlugin怎么在 code-splitting 的场景上使用?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 等待、埖开 普通会员 1楼

      在代码分割与懒加载情况下,抽离公用模块代码主要有两种方式:

      1. 使用Webpack的插件:Webpack有很多插件可以帮助你抽离公用模块。例如,你可以使用splitChunks插件来将公共模块拆分成独立的文件,然后在你需要的时候加载它们。

      例如,你可以在你的webpack配置文件中添加以下代码:

      javascript module.exports = { // ... optimization: { splitChunks: { cacheGroups: { common: { test: /[\\/]node_modules[\\/]/, chunks: 'all', name: 'common', }, }, }, }, };

      在这个例子中,splitChunks插件将node_modules目录下的所有公共模块拆分成一个名为common的文件夹。

      1. 使用懒加载:你可以使用懒加载技术来延迟加载一些模块。例如,你可以在你的HTML文件中使用懒加载来加载你不再需要的模块。

      例如,你可以在你的HTML文件中添加以下代码:

      ```html

      ```

      在这个例子中,@vue/genericon@5.1.0/dist/genericon.min.js和@vue/vue@2.6.15/dist/vue.min.js是两个不同的库,它们将分别被加载,而不是一次性加载所有。

      然后,你可以在你的JavaScript文件中使用import语句来导入这两个库:

      ```javascript import Genericon from '@vue/genericon' import Vue from '@vue/vue'

      // ... ```

      在这个例子中,import语句将@vue/genericon和@vue/vue库导入,并分别作为GeneratorIcon和Vue组件的组件。然后,你可以在模板中使用这些组件来显示你的公共模块。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部