前端基础之《React(4)—webpack简介-编译打包优化》

接上篇......

十二、编译打包优化

1、简化编译后的文件

如果看到dist目录里有xxx-vendors.xxx.js文件,这个是第三方包

部署时可以做优化,第三方包用CDN做优化

2、把第三方包从业务代码中抽离出来,为了以后部署时做CDN优化

config.js:

javascript 复制代码
// 两个环境都需要的公共配置

// 从node进程中引入path模块
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { ProgressPlugin, ProvidePlugin } = require('webpack') // webpack自带插件

module.exports = {
    entry: {
        // 把第三方库打包到vendors.js中,从业务代码中抽离出来,为了以后部署时做CDN优化
        vendors: ['react', 'react-dom/client'],
        // 可以给入口文件取个名字,给output使用
        app: {
            // 用import引入main.js作为入口文件
            import: path.resolve(__dirname, '../', 'src/main.js'),
            dependOn: 'vendors' // 用dependOn指定业务代码app依赖于vendors,先打包vendors,再打包app
        }
    },

    // 出口
    output: {
        // 自定义打包结果的输出目录,默认是dist目录,这里只能使用绝对路径
        path: path.resolve(__dirname, '../', 'dist'),
        // 指定打包结果的JS名称规范
        // filename: 'bundle.js' // 量词,一捆、一束
        filename: 'js/[name].[chunkhash:8].js',
        // 每次build打包时,都自动先删除dist中的旧文件
        clean: true
    },

    // 插件
    // 所有webpack插件都是class,用的时候需要new
    plugins: [
        // 用于把JS脚本和index.html自动注入合并
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname, '../', 'public/index.html'),
            inject: 'body', // 把JS注入到body结束标签前面
            filename: 'index.html', // 指定打包成功后这个模板叫什么名字
            title: '测试'
        }),
        // 添加编译进度条
        new ProgressPlugin({
            handler(percentage, message, ...args) {
                console.log(percentage, message, ...args)
            }
        }),
        // 从node_modules中加载react包,将其放在全局变量React中,这样之后所有的文件模块都可以直接访问
        new ProvidePlugin({
            React: 'react'
        }),
    ],

    // 在webpack眼中一切文件皆模块,webpack必须使用各种loaders来处理各种不同的模块文件
    module: {
        // 定义模块编译的规则和方式
        rules: [
            {
                test: /\.(js|jsx|ts|tsx)$/, // 检测模块以js结尾
                use: ['babel-loader'], // 使用babel编译器把ES6+的代码编译成ES5
                exclude: /node_modules/, // 排除node_modules目录下的第三方包文件
            }
        ]
    }
}

修改点:

entry: {

// 把第三方库打包到vendors.js中,从业务代码中抽离出来,为了以后部署时做CDN优化

vendors: 'react', 'react-dom/client',

// 可以给入口文件取个名字,给output使用

app: {

// 用import引入main.js作为入口文件

import: path.resolve(__dirname, '../', 'src/main.js'),

dependOn: 'vendors' // 用dependOn指定业务代码app依赖于vendors,先打包vendors,再打包app

}

},

编译后的文件:

dist/index.html:

把vendors换成CDN加速链接。

相关推荐
PedroQue991 小时前
0.8.2 新增 backFallback 配置,无 tabbar 页返回无忧
前端·uni-app
淡漠的蓝精灵2 小时前
web.py:一个简单到极致的 Python Web 框架
开发语言·前端·python·其他
开开心心就好2 小时前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节
起个名字费劲死了2 小时前
Halcon学习一:骰子识别
前端·python·学习
大江东去浪淘尽千古风流人物2 小时前
【HexVIO】DSP卸载双目惯性VIO:Hexagon向量化前端与单帧融合调度深度解析
前端·状态模式·slam·dsp·vio·hexagon·移动端加速
其实防守也摸鱼2 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
web打印社区2 小时前
Lodop排障总纲-常见报错一张表
开发语言·前端·javascript·chrome·websocket
李剑一3 小时前
为什么几乎所有的知名开源项目都是外国人写的?
前端·ai编程·deepseek
小郎君6583 小时前
(一)为什么表单需要第三种状态:disabled、readonly 与纯文本展示
前端·vue.js
计算机魔术师3 小时前
1.4万亿没人接,OpenAI自己砍了1500亿
前端