美文网首页
ESM与Vite

ESM与Vite

作者: miao8862 | 来源:发表于2021-05-10 21:20 被阅读0次

手写webpack中,我已经介绍过webpack的构建原理,它是一个需要构建一个完整的bundle.js后,才能使模块在浏览器运行的构建工具。所以它构建打包是需要花费时间的,当项目体积很大时,这个等待时间就会比较耗时了。

snowpack / vite基于 ESM的构建⼯具出现,让项⽬的⼯程构建不再需要构建⼀个完整的 bundle。由此,很多⼈都觉得我们不再需要打包⼯具的时代即将到来。可以借助浏览器 ESM 的能⼒,⼀些代码基本可以做到⽆需构建直接运⾏。

Vite(读⾳类似于[wɪt],法语,快的意思) 是⼀个由原⽣ ES Module 驱动的 Web 开发构建⼯具。在开发
环境下基于浏览器原⽣ ESM开发,在⽣产环境下基于 Rollup 打包

什么叫基于ESM?

ES Module是ES6推出的模块化方案,它支持使用import、export语法直接导入、导出模块,让其可以在浏览器上直接运行

// src/add.js
// ES6语法
export default (a, b) => a + b; 

// src/index.js
// ES6语法
import add from './add.js'
console.log(add(1,3))
<body>
  <!-- 直接导入时,会报错,不能在module模块外使用import语句  -->
  <script src="./index.js"></script>
</body>
image.png

当增加了type="module"属性后,就可以使用ESM的语法了,浏览器此时可以正常运行

<body>
  <!-- 增加type="module"后,就可以使用了 -->
  <script src="./index.js" type="module"></script>
</body>
image.png
这就是上面所说的基于浏览器支持ESM的原理。

vite有什么特点?

  • 闪电般的冷启动速度
  • (HMR)即时热模块更换(热更新)
  • 真正的按需编译
  • 极简的输出结果代码,tree-shaking非常强大

但要使用它,是要基于以下要求的:

  • 要求项⽬完全由 ES Module 模块组成
  • common.js 模块不能直接在 Vite 上使⽤(可以使用插件,但还不太友好)
  • 打包上依旧还是使⽤ rollup 等传统打包⼯具

Webpack与Vite对比

  • Vite特点: 轻量、按需打包rollup 、HMR (热渲染依赖)
  • Webpack:由于需要预先编译打包所以启动速度慢,但⽣态成熟。

对⽐:

  • webpack :
    强调对web开发的⽀持,尤其是内置了HMR的⽀持,插件系统⽐较强⼤,对各种模块系统兼
    容性最佳(amd,cjs,umd,esm等,兼容性好的有点过分了,这实际上有利有弊,导致⾯向webpack编程),有丰富的⽣态,缺点是产物不够⼲净,产物不⽀持⽣成esm格式, 插件开发上⼿较难,不太适合库的开发。
  • rollup
    强调对库开发的⽀持,基于ESM模块系统,对tree shaking有着良好的⽀持,产物⾮常⼲净,⽀持多种输出格式,适合做库的开发,插件api⽐较友好,缺点是对cjs⽀持需要依赖插件,且⽀持效果不佳,需要较多的hack,不⽀持HMR,做应⽤开发时需要依赖各种插件。
  • esbuild
    强调性能,内置了对css、图⽚、react、typescript等内置⽀持,编译速度特别快(是webpack和rollup速度的100倍+),缺点是⽬前插件系统较为简单,⽣态不如webpack和rollup成熟。

相关文章

  • ESM与Vite

    在手写webpack[https://www.jianshu.com/p/749ace912899]中,我已经介绍...

  • Vite 解读

    Vite 的作用 主要解决的问题是提升我们打包的一个速度: vite 的基础 浏览器能够加载 esm 模块: 资源...

  • vue3.0+vite+typescipt

    vite是什么 vite 是一个由原生 ESM 驱动的 Web 开发构建工具。在开发环境下基于浏览器原生 ES i...

  • 2022-03-03 vite 关于 global is not

    因为 Vite 是 ESM 机制,有些包内部使用了 node 的 global 对象,解决此问题可以通过自建 po...

  • webpack处理cmd和esm规范

    cmd 引用 cmd cmd 引用 esm esm 引用 esm esm 引用 cms

  • CommonJs 与 ESM

    ES Modules 特性 自动采用严格模式,忽略 'user strict' 每个 ES Module 都是运行...

  • vue3+vite常用的vite.config.js配置

    前言 文章vite版本基于: "^2.0.5",Vite 2.0 core 现在与框架无关。现在通过@vitejs...

  • elasticsearch 迁移

    https://github.com/medcl/esm-abandoned下载esm.exe在cmd中执行以下命令

  • 索引迁移

    索引迁移工具esm 下载地址:https://github.com/medcl/esm经过测试发现使用--copy...

  • vue3.0+vite+Cesium使用记录

    项目使用,本项目使用vite与vue vue3.0项目Vite + JSCesium初学,做记录 序言 Cesiu...

网友评论

      本文标题:ESM与Vite

      本文链接:https://www.haomeiwen.com/subject/qstmdltx.html