Vite配置优雅的code spliiting代码分割详解

目录
  • Vite如何配置分割代码
    • 1.什么是代码分割/code spliiting
    • 2.Vite 中 rollup code spliiting分割默认方法原理
      • (1)按照动态导入语句分割打包测试。
      • (2)按照资源导入入口点分割打包测试。
      • (3)manualChunks函数 手动自定义分割。(下面的案例)
    • 3.如何在Vite中配置(vite.config.ts)代码分割/code spliiting (核心关键)
      • Vite代码分割方法1
      • Vite代码分割方法2

Vite如何配置分割代码

1.什么是代码分割/code spliiting

前端生态 rollup 和 webpack都有的概念。 如果把所有代码都打包到一起,可能最终的代码非常大。从而影响加载时间。

而且,很多代码是初始加载时,不需要的。因此,我们可以根据代码使用的紧急程度,将代码分割打包后,可以按需加载。

2.Vite 中 rollup code spliiting分割默认方法原理

rollup code-spliiting代码分割 默认是由es6 esm(ECMAScript Module)的importexport js模块化功能实现的,CommonJS标准无法实现。

// 提前安装rollup
npm i -g rollup

案例 目录

├─dist
└─src
        foo.js
        main.js
        main1.js

(1)按照动态导入语句分割打包测试。

//// foo.js
export default 'hello foo!';
// main.js文件
// 动态导入案例1
export default function () {
    import('./foo.js')
    .then(() => {
        // console.log(导入成功);
    })
    .catch(() => {});
}
执行 rollup src/main.js   -f cjs -d dist

打包/main.js 生成两个文件

打包后的代码展示

// dist\foo-xxxxxx.js
'use strict';
var foo = 'hello foo!';
exports["default"] = foo;
// dist\main.js
'use strict';
// 动态导入案例1
function main () {
    Promise.resolve().then(function () { return require('./foo-e385385a.js'); })
    .then(() => {
        // console.log(导入成功);
    })
    .catch(() => {});
}
module.exports = main;

按照动态导入语句分割打包测试验证成功。

(2)按照资源导入入口点分割打包测试。

// foo.js
export default 'hello foo!';
// main.js文件
// 资源静态导入案例1
import foo from './foo.js';
export default function () {
    console.log(foo);
}
// main1.js文件
// 资源静态导入案例2
import foo from './foo.js';
export default function () {
    console.log(foo);
}
执行 rollup src/main.js src/main1.js  -f cjs -d dist

打包/main.js和/main1.js文件 生成三个文件

打包后的代码展示

// dist\foo-xxxx.js
'use strict';
var foo = 'hello foo!';
exports.foo = foo;
// dist\main.js
'use strict';
var foo = require('./foo-f41bffe6.js');
// 静态导入案例
function main () {
    console.log(foo.foo);
}
module.exports = main;
// dist\main1.js
'use strict';
var foo = require('./foo-f41bffe6.js');
function main1 () {
    console.log(foo.foo);
}
module.exports = main1;

按照资源导入入口点分割打包测试验证成功。

(3)manualChunks函数 手动自定义分割。(下面的案例)

3.如何在Vite中配置(vite.config.ts)代码分割/code spliiting (核心关键)

Vite代码分割方法1

// vite.config.ts
build: {
    // rollup 配置
    rollupOptions: {
        output: {
            // key自定义 value[] 插件同步package.json名称 或 src/相对路径下的指定文件 (自己可以看manualChunks ts类型)
            manualChunks: {
                // vue vue-router合并打包
                vue: ['vue', 'vue-router'],
                echarts: ['echarts'],
                lodash: ['lodash'],
                // 两个文件合并成一个helloWorld文件
                helloWorld: ['src/components/HelloWorld.vue','src/components/HelloWorld1.vue'],
                ...
            }
        }
    }
}

Vite代码分割方法2

// vite.config.ts
build: {
    // rollup 配置
    rollupOptions: {
        output: {
            manualChunks(id: any): string {
                if (id.includes("style.css")) {
                    // 需要单独分割那些资源 就写判断逻辑就行
                    return 'src/style.css';
		}
                if (id.includes("HelloWorld.vue")) {
                    // 单独分割hello world.vue文件
                    return 'src/components/HelloWorld.vue';
		}
                // // 最小化拆分包
                if (id.includes("node_modules")) {
                    return id
                            .toString()
                            .split("node_modules/")[1]
                            .split("/")[0]
                            .toString();
		}
            }
        }
    }
}

以上就是Vite配置优雅的code spliiting代码分割详解的详细内容,更多关于Vite配置code spliiting的资料请关注我们其它相关文章!

(0)

相关推荐

  • Vite使用Esbuild提升性能详解

    目录 前言 初探 Esbuild 关键 API - transfrom & build plugin Esbuild 在 Vite 中的巧妙使用 预构建 middlewares 中内容转换 结束语 前言 在上一篇 为什么有人说 vite 快,有人却说 vite 慢? 中,我们提到过开发模式下使用 Vite 会有首屏性能下降的负面效果.之所以会造成首屏性能下降,一方面是 dev server 需要完成预构建才可以响应首屏请求:另一方面是需要对请求文件做实时转换. 也许有的同学会问,是不是针对这两个

  • 详解vite如何支持cjs方案示例

    目录 一.问题 二.解决方案 三.如何处理commonJS 一.问题 vite运行时使用esbuild,基于esm 大部分三方包为UMD规范,输出的是CommonJS的包(比如react.lodash) // react 入口文件 // 只有 CommonJS 格式 if (process.env.NODE_ENV === "production") { module.exports = require("./cjs/react.production.min.js"

  • 深入剖析vite到底是快还是慢原理详解

    目录 前言 Vite 的快 快速的冷启动 快速的热更新 Vite 的慢 首屏性能 懒加载性能 结束语 前言 谈到 Vite,给人的第一印象就是 dev server 启动速度快.同样规模的项目,相比 Webpack 动辄十几秒甚至几十秒的的启动速度,Vite 简直是快到没朋友,往往数秒之内即可完成启动(PS: 都没有时间去喝一杯 ️ 啦). 正好小编最近在做一些关于开发体验的性能优化,就想着把手上一些项目的开发模式更新为 Vite.经过一番操作,终于改造成功,而效果也不负众望,项目启动速度由原来

  • vue3 Vite 进阶rollup命令行使用详解

    目录 rollup介绍 以命令行方式打包 Tree Shaking Rollup 的命令行使用 命令行 format 格式 rollup.config.js 设置/获取环境变量 插件 plugins rollup介绍 开源类库优先选择 以 ESM 标准为目标的构建工具 Tree Shaking 以命令行方式打包 安装 rollup npm install -g rollup 创建 index.js 文件 import path from "path"; console.log(&quo

  • Vite的createServer启动源码解析

    目录 启动Vite的createServer 通过vite3安装一个vue的工程 添加断点并开启调试 边调试边理解代码 启动Vite的createServer 为了能够了解vite里面运行了什么,通过执行单步调试能够更加直观的知道Vite具体内容.所以这次我们来试着启动Vite的createServer,并进行调试. 通过vite3安装一个vue的工程 进入工作目录,运行下面的代码,项目名称随意,语言用Vue. npm create vite 进入工程目录安装依赖 添加断点并开启调试 通过vsc

  • Vite配置优雅的code spliiting代码分割详解

    目录 Vite如何配置分割代码 1.什么是代码分割/code spliiting 2.Vite 中 rollup code spliiting分割默认方法原理 (1)按照动态导入语句分割打包测试. (2)按照资源导入入口点分割打包测试. (3)manualChunks函数 手动自定义分割.(下面的案例) 3.如何在Vite中配置(vite.config.ts)代码分割/code spliiting (核心关键) Vite代码分割方法1 Vite代码分割方法2 Vite如何配置分割代码 1.什么是

  • VSCode的使用配置以及VSCode插件的安装教程详解

    配置篇 打开设置界面 许多设置都需要在设置界面进行,所以想要配置第一步就应该是打开设置界面. 1> 鼠标操作打开.File --> Preferences --> Settings 2> 界面左下角的设置图标 打开设置有的是代码视图,有的不是,可以通过设置右上角的三个点进行切换. tab键的缩进控制 VSCode默认的tab键是缩进4个空格,但是有很多时候我们需要修改这个缩进,如vue用ES6的时候缩进4个空格会报错,这里我们就可以修改这个配置. 首先就是打开设置 直接搜索 tab

  • Springboot配置返回日期格式化五种方法详解

    目录 格式化全局时间字段 1.前端时间格式化(不做无情人) 2.SimpleDateFormat格式化(不推荐) 3.DateTimeFormatter格式化(不推荐) 4.全局时间格式化(推荐) 实现原理分析 5.部分时间格式化(推荐) 总结 应急就这样 格式化全局时间字段 在yml中添加如下配置: spring.jackson.date-format=yyyy-MM-dd HH:mm:ss 或者 spring: jackson: ## 格式为yyyy-MM-dd HH:mm:ss date-

  • Activity配置、启动和关闭activity实例详解

    大家先看下效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个Android应用程序的基石.系统可以通过不同组建提供的切入点进入到开发的应用程序中.对用户来说不是所有的组建都是实际的切入点,但是他们之间都是相互依赖的,它们每一个作为存在的实体,扮演着特定的角色,作为独一无二的基石帮助开发者定义Android应用的行为.下面我将整理自己的Activity学习点滴

  • Linux server配置安装Java与Tomcat服务器教程详解

    系统:Ubuntu 16.04 dev_desktop 1.Java安装并配置环境变量 (1)从Java官方网站下载最新版JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载jdk压缩包 jdk-8u144-linux-x64.tar.gz (2)  将压缩包解压并复制到/usr/lib 目录下 tar -zxvf jdk-8u144-linux-x64.tar.gz sudo cp -r ./jdk

  • Eclipse中导入Maven Web项目并配置其在Tomcat中运行图文详解

    今天因为实习的关系需要讲公司已经开发的项目导入进Eclipse,而公司的项目是用Maven来构建的所以,需要将Maven项目导入进Eclipse下. 自己因为没有什么经验所以搞了得两个多小时,在这里和大家分享一下自己的经验已经在这之中遇到的一些问题. 首先我通过svn将公司的项目checkout到了本地. 因为Maven遵循的是规约比配置重要的原则,所以Maven项目的结构一般是进入目录后是一个pom.xml文件和一个src文件夹,当然可能还存在一些README之类的这些都不重要,最关键的就是p

  • android studio 3.4配置Android -jni 开发基础的教程详解

    首先下载配置android studio ndk 1.打开sdkManager下载CMake和LLDB 2.配置ndk 项目新建 项目建立完毕后,工程目录如下,cpp文件夹是系统自动生成的 3.自定义 navite方法 接下来开始写自定义的一个native方法,新建一个Hello.java文件,里面写一个add求和的native方法,如下 生成c++头文件 然后在windows控制台Terminal进入hello.java所在的目录执行javac hello.java,如下 执行完毕后hello

  • 使用IntelliJ IDEA 配置安卓(Android)开发环境的教程详解(新手必看)

      上移动端的测试课,老师和同学们用的都是eclipse, 只有我一个人用的是idea(用了两款软件之后觉得IDEA更好),真的太难了,配置环境就只有一个人孤军奋战了,自己选择的路,爬都要爬完,害!   有大佬推荐我用Android studio,去了解了一下,这个软件也不错,考虑到已经用了IDEA那就用吧. 操作环境和基本配置 操作环境:Win 10 基本环境配置:Java 1.8 基本工具:IDEA(自行下载安装购买,支持正版!) 一.jdk的下载安装与配置 1.1下载安装 jdk的官网下载

  • SpringBoot日期格式转换之配置全局日期格式转换器的实例详解

    1. SpringBoot设置后台向前台传递Date日期格式 在springboot应用中,@RestController注解的json默认序列化中,日期格式默认为:2020-12-03T15:12:26.000+00:00类型的显示. 在实际显示中,我们需要对其转换成我们需要的显示格式. 1.1 方式1:配置文件修改 配置文件配置application.yml: spring: # 配置日期格式化 jackson: date-format: yyyy-MM-dd HH:mm:ss #时间戳统一

  • php命令行模式代码实例详解

    php全集行模式,即php-cli,官方文档中称为: CLI SAPI(Server Application Programming Interface,服务端应用编程端口).听着挺复杂.其实是因为php原本为服务器端的脚本语言,所以引申出这个叫法. 与服务端模式的不同 服务端模式主要有两种工作方式: 作为web server的模式方式或作为一个cgi可执行程序. 前者,比如作为apach中的一个模块(如:php5apache2.dll); 后者作为可执行程序,如php-cig. 现在的替代者为

随机推荐