liife
liife
  • 发布:2025-03-05 16:19
  • 更新:2025-03-12 15:21
  • 阅读:149

vue2 h5 通过Webpack的splitChunks配置将代码拆分后,生成的多个JS文件无法自动注入到index.html中

分类:uni-app

这是vue.config.js:、

const CompressionPlugin = require("compression-webpack-plugin");  
module.exports = {  
    chainWebpack: (config) => {  
        // 发行或运行时启用了压缩时会生效  
        config.optimization.minimizer('terser').tap((args) => {  
            const compress = args[0].terserOptions.compress  
            const output = args[0].terserOptions.output;  
            //移除 console 代码(包含所有 console 方法,如 log,debug,info...)  
            compress.drop_console = true;  
            // 移除注释  
            //output.comments = false;  
            //紧凑输出  
            //output.beautify = false;  

            //console.log('output',output)  
            return args  
        })  
    },  
    configureWebpack: (config) => {  
        if (process.env.NODE_ENV === "production") {  
            //gzip  
            config.plugins.push(  
                new CompressionPlugin({  
                    filename: "[path][base].gz",  
                    algorithm: "gzip",  
                    test: /\.(js|css|html)$/,  
                    threshold: 10240,  
                    minRatio: 0.8,  
                    //deleteOriginalAssets: false,  
                })  
            );  
            // 开启分离js  
            config.optimization = {  
                runtimeChunk: 'single',  
                splitChunks: {  
                    chunks: 'all', // 可选值:all,async 和 initial。all功能最强大,所以咱们就使用all  
                    maxInitialRequests: Infinity, // 最大并行请求数,为了以防万一,设置无穷大即可  
                    minSize: 20000, // 引入的模块大于20kb才做代码分割,官方默认20000,这里不用修改了  
                    maxSize: 60000, // 若引入的模块大于60kb,则告诉webpack尝试再进行拆分  
                    cacheGroups: {  
                        vendors: {  
                            test: /[\\/]node_modules[\\/]/, // 使用正则匹配node_modules中引入的模块  
                            priority: -10, // 优先级值越大优先级越高,默认-10,不用修改  
                            name(module) { // 设定分包以后的文件模块名字,按照包名字替换拼接一下  
                                const packageName = module.context.match(  
                                    /[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]  
                                return `npm.${packageName.replace('@', '')}`  

                            },  
                        },  
                    },  
                }  
            }  
        }  
    },  
};

这是template.h5.html模版文件:

<html lang="zh-CN">  
    <head>  
        <meta charset="utf-8">  
        <meta http-equiv="X-UA-Compatible" content="IE=edge">  
        <title>  
            <%= htmlWebpackPlugin.options.title %>  
        </title>  
        <script>  
            var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))  
            document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')  

        </script>  
        <link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />  
    </head>  
    <body>  
        <noscript>  
            <strong>Please enable JavaScript to continue.</strong>  
        </noscript>  
        <div id="app"></div>  
        <!-- built files will be auto injected -->  
    </body>  
</html>

需要在html里怎么配置,有大佬支一招吗

2025-03-05 16:19 负责人:无 分享
已邀请:
liife

liife (作者)

有人吗

liife

liife (作者)

社区还有人吗

liife

liife (作者)

0.0.0.0.0.

liife

liife (作者)

滴滴滴

liife

liife (作者)

这社区是凉了吗?

liife

liife (作者)

这社区是凉了吗?

杨杨得亿

杨杨得亿 - 这个人很懒,什么都没有留下~

需要在webpack.config.js中配置入口文件

module.exports = {  
    ......  
    entry: entries('src/pages/**/*.js'),  
    ......  
}
  • liife (作者)

    能再详细一点吗。。

    const glob = require('glob');


    function entries(pattern) {

    const entries = {};

    glob.sync(pattern).forEach(file => {

    const name = file.split('/').slice(-2, -1)[0]; // 获取目录名作为入口名称

    entries[name] = file;

    });

    return entries;

    }

    configureWebpack: (config) => {

    if (process.env.NODE_ENV === "production") {

    config.entry = entries('src/pages/*/.js');

    //gzip

    config.plugins.push(

    new CompressionPlugin({

    filename: "[path][base].gz",

    algorithm: "gzip",

    test: /.(js|css|html)$/,

    threshold: 10240,

    minRatio: 0.8,

    deleteOriginalAssets: false,

    })

    );

    // 开启分离js

    config.optimization = {

    runtimeChunk: 'single',

    splitChunks: {

    chunks: 'all', // 可选值:all,async 和 initial。all功能最强大,所以咱们就使用all

    maxInitialRequests: Infinity, // 最大并行请求数,为了以防万一,设置无穷大即可

    minSize: 20000, // 引入的模块大于20kb才做代码分割,官方默认20000,这里不用修改了

    maxSize: 60000, // 若引入的模块大于60kb,则告诉webpack尝试再进行拆分

    cacheGroups: {

    vendors: {

    test: /[\/]node_modules[\/]/, // 使用正则匹配node_modules中引入的模块

    priority: -10, // 优先级值越大优先级越高,默认-10,不用修改

    name(module) { // 设定分包以后的文件模块名字,按照包名字替换拼接一下

    const packageName = module.context.match(

    /[\/]node_modules\/([\/]|$)/)[1]

    return npm.${packageName.replace('@', '')}


                            },  
    },
    },
    }
    }
    }
    },

    打包报错。。

    2025-03-10 21:27

  • liife (作者)

    加我微信:fqm112。 有偿解决哈

    2025-03-10 21:46

  • 杨杨得亿

    回复 liife: config.entry = entries('src/pages//.js');

    这是你的代码,你无法匹配js 要加上一个
    ,*.js

    2025-03-11 08:04

  • liife (作者)

    回复 杨杨得亿:这几种方法都试了,貌似还不行,下方楼层贴图了

    2025-03-11 08:52

liife

liife (作者)

这几种方法都试了,还不行嘞,。。

杨杨得亿

杨杨得亿 - 这个人很懒,什么都没有留下~

+q 1016368828 把node_modules删掉 项目发我 给你看看

  • liife (作者)

    加你了。大哥

    2025-03-12 16:16

要回复问题请先登录注册