相关技巧
主页 > 网络编程 > 相关技巧 >

no-bundle构建原理浅析

2022-08-16 | 佚名 | 点击:

为什么需要构建工具?

什么是无包构建

它的构建方式是:

这种通过浏览器原生的模块进行解析的方式又称为 Native-ESM(Native ES Module)。

1

2

3

4

5

6

7

8

9

10

//./src/index.html

...

<!-- 注意: type="module" -->

<script type="module" src="./modules/foo.js"></script>

...

//.src/modules/foo.js

import { bar } from './bar.js'

import { appendHTML } from './common.js'

...

import('https://cdn.jsdelivr.net/npm/lodash-es@4.17.15/slice.js').then((module) => {...})

基于浏览器的 JS 模块加载功能

HTML 中的 Script 引用注意点:

模块内依赖的引用

无包构建工具的介绍:

Vite

Vite 是 Vue 框架的作者尤雨溪最新推出的基于 Native-ESM 的 Web 构建工具。

在开发环境下基于 Native-ESM 处理构建过程,只编译不打包,在生产环境下则基于 Rollup 打包。

Vite对导入模块的解析

对 HTML 文件的预处理

启动 Vite 时,会通过 serverPluginHtml.ts 注入 /vite/client 运行时的依赖模块,该模块用于处理热更新,以及提供更新 CSS 的方法 updateStyle。

对外部依赖包的解析

对 Vue文件的解析

对 Vue 文件的解析是通过 serverPluginVue.ts 处理的,分离出 Vue 代码中的 script/template/style 代码片段,并分别转换为 JS 模块,然后将 template/style 模块的 import写到script 模块代码的头部。

对 CSS 文件的解析

对 CSS 文件的解析是通过 serverPluginCSS.ts 处理的,解析过程主要是将 CSS 文件的内容转换为下面的 JS 代码模块,其中的 updateStyle 由注入 HTML 中的 /vite/client 模块提供

1

2

3

4

import { updateStyle } from "/vite/client"

const css = "..."

updateStyle(""..."", css) // id, cssContent

export default css

Vite 中的其他辅助功能

Vite 的使用限制

Snowpack

与 Vite 相同的功能点

两者都支持各种代码转换加载器、热更新、环境变量(需要安装 dotenv 插件)、服务代理、HTTPS 与 HTTP/2 等。

与 Vite 的差异点

无包构建 VS 打包构建

无包构建的优点

无包构建的缺点

原文链接:https://juejin.cn/post/7132120567410327566
相关文章
最新更新