首页 > 其他分享 >webpack生产环境优化:code split

webpack生产环境优化:code split

时间:2023-08-28 22:35:52浏览次数:39  
标签:文件 code src 入口 js webpack split 打包

转载请注明 来源:http://www.eword.name/
Author:eword
Email:[email protected]

webpack生产环境优化:code split

code split代码分割,既将打包后的js分割成多份js文件,
方便后期实现“并行加载”、“按需加载”等,提高性能。

一、核心配置

建议使用方式二的单入口模式,并按需使用方式三。

1.1、方式一:根据入口文件进行代码分割

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/

// resolve用来拼接绝对路径的方法
const { resolve } = require('path');
// 引入打包 html 文件的插件 html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    // webpack配置
    // 入口起点文件

    // 单入口
    // entry: './src/js/index.js',

    entry: {
        // 多入口:有一个入口,最终输出就有一个bundle,多入口就有多个bundle,每个bundle会打包成一个js文件。
        main:'./src/js/index.js',
        test:'./src/js/test.js',
    },
    // 输出
    output: {
        // 输出文件名
        filename: 'js/[name].[contenthash:10].js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build'),
    },

    // plugins的配置
    plugins: [
        // 详细的plugins配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML, 自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            // 复制../src/index.html'文件,并自动引入打包输出的所有资源(JS/CS5)
            template: './src/index.html',
            //压缩 html 代码
            minify: {
                //移除空格
                collapseWhitespace: true,
                //移除注释
                removeComments: true
            }
        }),

    ],
    // 模式  development  开发环境,production 生产环境
    // mode: 'development',
    // 生产环境下会自动压缩js代码
    mode: 'production',
};

核心配置

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/
    ……

    entry: {
        // 多入口:有一个入口,最终输出就有一个bundle,多入口就有多个bundle,每个bundle会打包成一个js文件。
        main:'./src/js/index.js',
        test:'./src/js/test.js',
    },
    // 输出
    output: {
        // 输出文件名
        filename: 'js/[name].[contenthash:10].js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build'),
    },
    
    ……
    

问题:不够灵活,需要为每一个想要分割的js文件进行配置。

1.2、方式二:配置optimization

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/

// resolve用来拼接绝对路径的方法
const { resolve } = require('path');
// 引入打包 html 文件的插件 html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    // webpack配置
    // 入口起点文件

    // 单入口
    // entry: './src/js/index.js',

    entry: {
        // 多入口:有一个入口,最终输出就有一个bundle,多入口就有多个bundle,每个bundle会打包成一个js文件。
        main:'./src/js/index.js',
        test:'./src/js/test.js',
    },

    // 输出
    output: {
        // 输出文件名
        filename: 'js/[name].[contenthash:10].js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build'),
    },

    // plugins的配置
    plugins: [
        // 详细的plugins配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML, 自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            // 复制../src/index.html'文件,并自动引入打包输出的所有资源(JS/CS5)
            template: './src/index.html',
            //压缩 html 代码
            minify: {
                //移除空格
                collapseWhitespace: true,
                //移除注释
                removeComments: true
            }
        }),

    ],

    /* 
    可以将node_modules中代码单独打包成一个chunk最终输出。
    自动分析多入口chunk中,有没有公共的文件。如果有会打包成单独一个chunk。
    */
    optimization: {
        splitChunks: {
            chunks: 'all'
        }
    }

    // 模式  development  开发环境,production 生产环境
    // mode: 'development',
    // 生产环境下会自动压缩js代码
    mode: 'production',

};

核心配置

    ……
    // 单入口
    // entry: './src/js/index.js',

    entry: {
        // 多入口:有一个入口,最终输出就有一个bundle,多入口就有多个bundle,每个bundle会打包成一个js文件。
        main:'./src/js/index.js',
        test:'./src/js/test.js',
    },
    ……
    /* 
    可以将node_modules中代码单独打包成一个chunk最终输出。
    自动分析多入口chunk中,有没有公共的文件。如果有会打包成单独一个chunk。
    */
    optimization: {
        splitChunks: {
            chunks: 'all'
        }
    }
    ……
  • 单入口下,可以将node_modules中代码单独打包成一个chunk最终输出。
  • 多入口下相比于单入口,更是能自动分析多入口chunk中有没有公共的文件。如果有会打包成单独一个chunk。

1.3、方式三:import动态导入

//入口文件
// ./src/index.js

import('./test')
    .then(({mul,count}) => {
        //文件加载成功~
        // eslint-disable-next-line 
        console.log(mul(2,5));
    })
    .catch(() => {
        //文件加载失败~
        // eslint-disable-next-line 
        console.log('文件加载失败~');
    });

核心配置

import('./xxx/xxx')
    .then(({mul,count}) => {
        //文件加载成功时执行。
        ……
    })
    .catch(() => {
        //文件加载失败时执行。
        ……
    });

通过js代码,让某个文件被单独打包成一个chunk。
import动态导入语法:能将某个文件单独打包。

1.3.1、自定义打包的文件名

//入口文件


// 在import中加入配置信息:/* webpackChunkName: 'test' */
// 用webpackChunkName指定chunk名称。

import(/* webpackChunkName: 'test' */'./test')
    .then(({mul,count}) => {
        //文件加载成功~
        // eslint-disable-next-line 
        console.log(mul(2,5));
    })
    .catch(() => {
        //文件加载失败~
        // eslint-disable-next-line 
        console.log('文件加载失败~');
    });

四、工程文件目录

# 目录结构
.
├── src
│   ├── index.html
│   └── js
│       ├── index.js
│       └── test.js      //希望被独立打包的文件
└── webpack.config.js

标签:文件,code,src,入口,js,webpack,split,打包
From: https://www.cnblogs.com/eword/p/webpack202308271.html

相关文章

  • webpack生产环境优化:PWA
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:PWAPWA可简称为“离线可访问技术”。一、下载插件PWA:渐进式网络开发应用程序(离线可访问),需要插件workbox-webpack-plugin的支持。workbox--〉workbox-webpack-plugin......
  • webpack生产环境优化:多线程打包
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:多线程打包多线程打包主要用于需要打包的文件较多的情况下提高打包效率,缩短打包时间。注意:开启多进程打包时,进程开启大概需要600ms,进程通信也有开销。建议:只有工作消耗时间......
  • webpack生产环境优化:懒加载和预加载
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:懒加载和预加载一、直接加载浏览器一打开,直接加载了test.js这里使用了直接导入方式。直接导入:import{mul}from'./test';//./src/js/index.js//入口文件console.......
  • webpack生产环境优化:externals
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:externalsexternals配置主要是为了防止某些通过CDN引入的包被打包到输出的bundle中。一、核心配置/*webpack.config.jswebpack的配置文件路径:./webpack.config......
  • webpack生产环境优化:dll
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:dlldll动态链接库目的:单独的将多个指定的第三方库打包成一个chunk。意义:将不同的库分割开来,实现代码分割和避免重复打包,在节省打包时间的同时方便按需加载和预加载的实现......
  • Android开发|备战金九银十,LeetCode高频面试题合集
    金九银十来了,你准备好备战了么!而最高效的准备方式,不外乎刷题、刷题、刷题。刷题就不得不提LeetCode了~俗话说的好:LeetCode刷不好,一面都过不了。所以,今天就将一些LeetCode大厂高频面试题整理成合集分享给大家,希望能助大家一臂之力~有需要的小伙伴,可以点击下方课程链接详细了解!!!h......
  • Educational Codeforces Round 118
    好烦,又是只有三题,讲课的老师实在是太吵了,没法思考细节A题开始还搞麻烦了B题纯诈骗,找最小的做y即可C题直接二分判断即可D题其实没看多久我就秒了,对于当前的数x来说无非就是mex=x-1mex=xmex=x+1\(f[x]\)表示mex=x,后面没有数\(g[x]\)表示mex=x,后面有x+1,并且只可能是x+1,不可......
  • 解决VSCode下载速度慢
    1.打开vscode官网浏览器搜索:vscodedownload或打开该网站https://code.visualstudio.com/Download/2.选中系统对应的版本 3.复制下载链接地址 4.修改链接地址将复制后的链接地址的域名(上图https后面框起来的那块)修改为 vscode.cdn.azure.cn最后变成类似:https......
  • VSCode下载慢问题解决
    1.打开vscode官网浏览器搜索:vscodedownload或打开该网站https://code.visualstudio.com/Download/2.选中系统对应的版本 3.复制下载链接地址 4.修改链接地址将复制后的链接地址的域名(上图https后面框起来的那块)修改为 vscode.cdn.azure.cn最后变成类似:https......
  • AtCoder Beginner Contest 317 F - Nim
    数位DP#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intdp[64][10][10][10][2][2][2][2][2][2];intmain(){lln;intb1,b2,b3;cin>>n>>b1>>b2>>b3;memset(dp,-1,sizeofdp);strings......