本文档解释了 Vue.js 如何从源代码构建并以不同格式分发,以适应各种 JavaScript 环境。它涵盖了构建过程、配置、输出格式以及针对特定环境的优化,使 Vue.js 能够在浏览器、Node.js 应用程序和模块打包工具中高效使用。
有关 Vue.js 架构和组件系统的信息,请参阅架构。有关单文件组件编译的详细信息,请参阅单文件组件 (SFC)。
Vue.js 使用复杂的构建系统为不同的环境创建优化的分发版本。该构建系统将 TypeScript 源文件编译成各种 JavaScript 模块格式,包括开发和生产两种变体。
构建系统配置为从单个代码库生成多种分发格式。构建过程由 scripts/build.js 脚本协调,该脚本使用 Rollup 进行打包,并使用 Terser 对生产版本进行代码压缩(minification)。
来源:scripts/build.js38-61 scripts/build.js63-89
构建过程包括以下步骤:
Vue.js 以多种格式分发,以支持各种使用场景
| 格式 | 文件名模式 | 用例 |
|---|---|---|
| UMD | vue.js / vue.min.js | 通过 <script> 标签直接在浏览器中使用 |
| CommonJS | vue.common.js | Node.js 环境 |
| ES 模块 | vue.esm.js | 现代打包工具(webpack, Rollup) |
| Node 的 ES 模块 | vue.runtime.mjs | 支持 ESM 的 Node.js |
每种格式都有两种变体
来源:根据构建输出分析得出的图表
Vue.js 提供针对开发和生产环境优化的不同构建版本。开发版本包含有用的警告和调试信息,而生产版本则经过压缩和优化以提高性能。
来源:dist/vue.common.js1-5 dist/vue.runtime.common.js1-5
CommonJS 分发版本使用环境检测来自动加载合适的构建版本
这使得应用程序在部署时可以自动使用优化的生产构建版本,同时开发者在开发过程中也能收到有用的警告。
构建脚本(scripts/build.js)旨在按顺序处理多个构建配置
来源:scripts/build.js23-36 scripts/build.js38-61 scripts/build.js63-89
构建过程包括以下步骤:
选择合适的 Vue.js 构建版本取决于您的使用场景
| 用例 | 推荐构建版本 |
|---|---|
| 通过 CDN 直接在浏览器中使用 | UMD (vue.min.js) |
| 使用 vue-loader 的 Webpack/Rollup | 仅运行时 ES 模块 (vue.runtime.esm.js) |
| Node.js 服务端渲染 | CommonJS (vue.runtime.common.js) |
| 支持 ESM 的 Node.js | Node ESM (vue.runtime.mjs) |
仅运行时构建版本更小、更高效,但需要预编译模板。这通常通过使用构建工具(如 webpack 的 vue-loader 或 rollup-plugin-vue)来完成。
Vue.js 构建系统包含优化,以最小化捆绑包大小
makeMap 这样的纯函数被标记为移除构建脚本还报告原始文件大小和 gzip 压缩文件大小,以帮助跟踪捆绑包大小
vue.common.prod.js 93.32kb (gzipped: 34.53kb)
vue.runtime.common.prod.js 63.52kb (gzipped: 22.89kb)
vue.esm.prod.js 93.69kb (gzipped: 34.65kb)
vue.runtime.esm.prod.js 63.89kb (gzipped: 23.01kb)
Vue.js 的构建和分发系统旨在为各种环境提供优化的构建版本,同时在功能和文件大小之间保持平衡。通过提供多种分发格式并区分开发和生产构建版本,Vue.js 确保了在整个 JavaScript 生态系统中的高效使用。