前端Web框架【免费下载链接】vueThis is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core项目地址https://gitcode.com/gh_mirrors/vu/vue点击查看免费下载Vue 2 的官方变更记录CHANGELOG.md完整覆盖了从 2016 年 2.0.0-alpha 到 2023 年 2.7.16 Swan Song 的全部版本脉络其中最核心的一段是 2.7.0 将 Composition API、script setup与 CSS v-bind 回移植到 Vue 2 响应式体系之上。本文以这份变更记录为骨架结合本仓库源码src/v3、packages/compiler-sfc还原每个关键版本的背景、行为差异与升级路径读完你可以掌握 2.7 升级清单、Composition API 与 Vue 3 的差异边界以及 SFC 编译链路的底层实现。仓库定位与 CHANGELOG 的阅读方法本仓库是 Vue 2 的官方源码仓库Vue 3 已迁移至独立的 core 仓库。根目录 package.json 中的version: 2.7.16与 CHANGELOG 首条[2.7.16 Swan Song]2023-12-24相互印证——2.7.16 是 Vue 2 分支的最后一个正式版本命名 Swan Song天鹅挽歌宣告了 Vue 2 维护周期的终结。CHANGELOG 采用 conventional-changelog 的 Angular 风格格式每个版本标题下按Bug Fixes、Features、Performance Improvements、Reverts分类并附有 compare 链接、commit hash 和关联 issue 编号如closes #13134。脚本 scripts/gen-release-note.js 与 scripts/release.js 负责发布与变更记录生成package.json中changelog脚本使用conventional-changelog -p angular -i CHANGELOG.md -s。阅读这份文档时有三个实用切入点追版本脉络从2.7.0-alpha.12022-05-31到2.7.02022-07-01的 23 个预发布版本记录了 Composition API 回移植的完整过程是理解功能如何一步步落地的第一手材料查行为差异2.7.0条目下的 Behavior Differences from Vue 3 和 Notes on API exposure 是使用 2.7 时最容易踩坑的官方说明做升级决策2.7.0条目下的 Upgrade Guide 给出了 Vue CLI / Vite / Volar 三条升级路径及依赖版本硬性要求。2.7.0终章里的最大特性发布2.7.02022-07-01是 Vue 2 生命周期中最后也是最大的一次功能性发布。它没有引入新架构而是把 Vue 3 的三大招牌能力完整回移植Backported到 Vue 2 的 getter/setter 响应式体系上。Backported Features 清单Composition APIsetup()、ref()、reactive()、computed()、生命周期钩子onMounted等、provide()/inject()、useSlots()/useAttrs()、模板 refs 全部可用SFCscript setup单文件组件内的组合式语法糖SFC CSS v-bind在style中通过v-bind()引用组件状态。除此之外还补充了以下 APIdefineComponent()相比Vue.extend拥有更强的类型推断h()、useSlot()、useAttrs()、useCssModules()注正式导出名为useCssModule仓库 src/v3/index.ts 中export { useCssModule } from ./sfc-helpers/useCssModuleset()、del()、nextTick()在 ESM 构建中作为命名导出提供emits选项仅用于类型检查不影响运行时行为模板表达式支持 ESNext 语法——在构建系统中编译后的模板渲染函数会经过与普通 JS 相同的 loader/插件即给.js配置了 BabelSFC 模板表达式也会被 Babel 处理。API 暴露方式Notes on API exposure2.7 的 API 暴露方式在不同构建产物中不同这是文档明确强调的易错点ESM 构建上述 API 仅以命名导出named exports形式提供import Vue, { ref } from vue Vue.ref // undefined, use named export insteadUMD / CJS 构建这些 API 作为全局Vue对象上的属性暴露以 CJS 构建进行 bundler 外部化时bundler 应能处理 CJS 的 ESM interop。仓库 src/v3/index.ts 正是这份命名导出清单的源码实体ref/shallowRef/isRef/toRef/toRefs/unref/proxyRefs来自./reactivity/refreactive/shallowReactive/markRaw/toRaw来自./reactivity/reactive还有computed、watch/watchEffect、effectScope系列、provide/inject、h、getCurrentInstance、useSlots/useAttrs/useListeners、defineComponent、defineAsyncComponent等。文件头部注释还特别提醒Note: also update dist/vue.runtime.mjs when adding new exports to this file——说明 ESM 运行时构建与命名导出是手工同步维护的。与 Vue 3 的行为差异Behavior Differences from Vue 3由于 2.7 的 Composition API 建立在 Vue 2 的 getter/setter 响应式系统上而非 Vue 3 的 Proxy存在四项必须知晓的差异Vue 2 的变更检测注意事项Change Detection Caveats全部仍然适用即对象属性的新增/删除无法被自动侦测reactive()、ref()、shallowReactive()直接就地转换原对象而非创建代理// true in 2.7, false in 3.x reactive(foo) fooreadonly()会创建独立对象但不会追踪新添加的属性且对数组不生效避免把数组作为reactive()的根值——没有属性访问时数组的变更不会被追踪会触发警告响应式 API 忽略 symbol 键的属性。明确未移植的功能文档明确列出以下功能NOT ported❌createApp()Vue 2 没有隔离的应用作用域❌script setup中的顶层awaitVue 2 不支持异步组件初始化❌ 模板表达式中的 TypeScript 语法与 Vue 2 解析器不兼容❌ Reactivity transform仍处于实验阶段❌ Options 组件不支持expose选项但script setup中支持defineExpose()。TypeScript 变化defineComponent提供接近 Vue 3 的类型推断但注意defineComponent()内部的this类型与Vue.extend()的this不互通TSX 支持变为内置。文档特别提醒如果项目此前有手写的 JSX 类型 shim需要移除。仓库 types/v3-define-component.d.ts 即是该类型的承载文件src/v3/index.ts 中也注释说明 defineComponent 的类型是手动声明在根目录types/v3-define-component.d.ts的。script setup与 CSS v-bindSFC 编译链路源码剖析2.7 的script setup支持由 packages/compiler-sfc 包提供。它的工作入口是 compileScript.ts 的compileScript()函数注释明确说明Compilescript setup。它需要整个 SFC descriptor因为需要处理普通script与script setup同时存在时的合并。特殊宏通过常量识别defineProps、defineEmits、defineExpose、withDefaults。默认导出的重写rewriteDefaultscript setup编译的一个关键底层工具是 rewriteDefault.ts 中的rewriteDefault(input, as, parserPlugins)它把script块中的export default重写为变量声明以便注入编译产物。其实现要点无默认导出时直接追加const ${as} {}通过正则匹配export default class、export default、export { ... as default }三种形态对于含多行注释/模板字符串的复杂脚本回退到 Babel 完整解析babel/parserMagicString处理ExportDefaultDeclaration与ExportNamedDeclaration节点。这一点在 CHANGELOG 的修复条目中反复出现2.7.15 修复 macro usage in multi-variable declaration、2.7.9 修复 rewriteDefault for class with decorators、2.7.16-beta.1 修复 rewriteDefault edge cases可见该工具是script setup稳定性的核心。CSS v-bind 的编译实现CSS v-bind 由 cssVars.ts 实现。其中定义了vBindRE /v-bind\s*\(/g用于在样式中扫描v-bind(...)调用并跳过注释中的匹配cssVarsPlugin是一个 PostCSS 插件cssVarsPlugin.postcss true它在编译期收集样式中的 CSS 变量引用供compileScript通过genCssVarsCode/genNormalScriptCssVarsCode生成运行时注入代码。compileScript的选项里也明确了id的作用Scope ID for prefixing injected CSS variables. This must be consistent with theidpassed tocompileStyle.——即 CSS 变量按 scope id 做前缀隔离。从 alpha 到 beta23 个预发布版本的演进2.7.0 的功能是在约一个月的密集迭代中成型的CHANGELOG 完整记录了关键里程碑版本日期关键内容2.7.0-alpha.12022-05-31完整 Composition APIsetup()、响应式 API、生命周期钩子、provide/inject、useSlots/useAttrs、模板 refs2.7.0-alpha.22022-06-01exports字段 .mjs构建set/del命名导出2.7.0-alpha.42022-06-01defineComponent对非对象 provide 值做防护2.7.0-alpha.62022-06-09为 Volar 集成添加 JSX 类型模板 props 校验不再需要vue/runtime-dom2.7.0-alpha.82022-06-14基础script setup支持需vue-loader^15.10.0-beta.1当时组件解析与defineXXX宏类型尚未完成2.7.0-alpha.92022-06-16defineExpose()、script setup的指令解析与组件解析、宏的类型支持2.7.0-alpha.122022-06-16进一步对齐 compiler-sfc API 并暴露rewriteDefault2.7.0-beta.12022-06-17transformAssetUrl支持includeAbsolute对script setup顶层await给出警告2.7.0-beta.32022-06-20CSS v-bind、useCssModules、parse的 needMap 兼容2.7.0-beta.82022-06-28base 选项存在时不转换非相对路径资源2.7.02022-07-01正式发布2.7.1 → 2.7.16发布后的维护与修复2.7.0 正式发布后2.7 系列又经过 15 个补丁版本、横跨约一年半的维护期最终停在 2023-12-24 的 2.7.16。这些版本以 Bug Fixes 为主同时少量补了特性与性能优化可以按主题归纳响应式reactivity2.7.1 修复shallowReactive不应解包 refs 及 NaN 比较问题2.7.8 修复shallowReactive嵌套 ref 设置的边界情况2.7.14 为避免 IE 兼容性问题放弃在响应式实现中使用 WeakMapsrc/core/observer 体系仍是 defineProperty 风格2.7.13 修复 watch 避免遍历标记为非响应式的对象。script setup/ compiler-sfc2.7.5 修复 setup 返回的 reactive 对象在模板中使用时属性增删的检测2.7.7 修复 script setup 不应把原生元素解析为组件2.7.10 修复langjsx/tsx时不执行 deindent2.7.11 为兼容 fork-ts-checker-webpack-plugin 导出parseComponent源码见 parseComponent.ts。生命周期与 scope2.7.11 将setup钩子调整为在beforeCreate之前调用随后 2.7.12 因回归issue #12802/#12821/#12822整体回滚了该改动2.7.16 修复组件 effect scope 未正确断开的问题对应 src/v3/currentInstance.ts 与 effectScope 体系。类型types2.7.9 起密集补齐了DefineComponent导出、onErrorCaptured类型增强、mixins 推断、defineAsyncComponent类型导出、内置组件类型对应仓库 types/built-in-components.d.ts、tsx ref 属性支持等。watch2.7.9 修复 pre watcher 在卸载时触发2.7.11 为订阅者数量巨大的依赖提升取消订阅性能unsub性能优化。keep-alive2.7.16-beta.1 修复 keep-alive 内存泄漏issue #12827。SSR2.7.9 修复 on-component 指令在 SSR 中的渲染packages/server-renderer 的 directives 模块负责服务端指令处理2.7.11 清理了 SFC scoped deep 语法的弃用警告。期间还补入了两个值得注意的特性2.7.4 引入defineAsyncComponent源码 src/v3/apiAsyncComponent.ts并支持在defineComponent中使用函数式组件2.7.8 的 setup 上下文支持listeners并新增useListeners()辅助函数。升级指南从 Vue 2.6 平滑迁移到 2.72.7.0 条目附带的 Upgrade Guide 是官方给出的迁移操作手册分为四条路径Vue CLI / webpack将本地vue/cli-xxx依赖升级到主版本范围内的最新版v4 用~4.5.18v5 用~5.0.6将vue升级到^2.7.0。可以移除vue-template-compiler依赖2.7 不再需要若使用vue/test-utils可能需要暂时保留检查 package manager lockfile确保以下传递依赖达到版本要求vue-loader^15.10.0vue-demi^0.13.1若不满足需删除node_modules与 lockfile 后重新安装若此前使用vue/composition-api插件把 import 从它改为从vue导入。注意该插件导出的部分 API如createApp没有移植到 2.7使用script setup时若遇到未使用变量 lint 报错将eslint-plugin-vue升级到 92.7 的 SFC 编译器从 PostCSS 7 升级到 PostCSS 8。多数插件向后兼容但只支持 PostCSS 7 的自定义插件可能出问题需升级到 PostCSS 8 兼容版本。Vite2.7 的 Vite 支持通过新插件vitejs/plugin-vue2提供要求 Vue 2.7 及以上并取代旧的vite-plugin-vue2。注意新插件不做Vue 专属的 JSX/TSX 转换JSX/TSX 应由独立专用插件处理。Volar 兼容2.7 改进了类型定义不再需要为 Volar 模板类型推断单独安装vue/runtime-dom只需在tsconfig.json配置{ // ... vueCompilerOptions: { target: 2.7 } }Devtools 支持Vue Devtools 6.2.0 开始支持检查 2.7 的 Composition API 状态。版本演进回望2.0 → 2.6 的关键特性脉络CHANGELOG 的价值不只是 2.7——它完整保留了大版本的功能沉淀很多能力至今仍是 Vue 2 应用的基础设施。2.6 系列2019 年前后新插槽语法与 SSR 增强2.6.0-beta.2 引入动态指令参数v-on:[eventName]、v-bind:[attr]及自定义指令2.6.0 发布新插槽语法v-slot按 RFC 调整并增加对歧义用法的警告、v-bind.prop简写置于 flag 之后、Vue.observable()、浏览器 ESM 构建、nextTick统一微任务、编译器whitespace选项弃用preserveWhitespace、代码 frame 错误输出、.exact事件修饰符、catchError重命名为errorCaptured、SSR 的shouldPrefetch选项与renderToStringPromise 化、v-for支持可迭代对象、自定义toString()等2.6.13 支持模板中 BigInt、修正translate属性布尔判定、SSR 中 computed 以 vm 为第一参数调用2.6.14 的 vue-ssr-webpack-plugin 兼容 webpack 5。2.5 系列2017 年错误边界与异步能力2.5.0 引入.exact修饰符、errorCaptured原名 catchError、keep-alive的max属性、编译模板对函数式组件的支持、inject默认值、ignoredElements支持 RegExp、SSRrenderToString返回 Promise、v-on 自动按键推断、v-model动态 input type 绑定等2.5.18 引入async选项与 webpack 4 支持。2.4 系列2017 年透传与模板控制2.4.0 引入$attrs、$listeners与inheritAttrs选项对应仓库 src/core/instance/render.ts 的属性透传逻辑、模板comments选项保留注释、keep-aliveinclude/exclude 支持数组、v-on无参数对象语法、v-bindobject的.sync修饰符、provide 选项的合并策略、Vue.set/Vue.delete支持多种数组索引类型。2.2 / 2.3 系列2017 年组合式依赖注入与性能开关2.2.0-beta.1 引入provide/inject、renderError、组件model选项自定义v-model的 prop/event、config.performance、SSR 的 template 选项与多 chunk bundle 支持2.4.x 期间持续修复 provide/inject 与 mixins 的合并问题说明该能力在落地后经历了较长的打磨期。2.0 系列2016 年从 alpha 到正式版CHANGELOG 从2.0.0-alpha.12016-06-10开始记录经过 8 个 alpha、8 个 beta、8 个 rc最终2.0.02016-09-30正式发布。早期条目多为 Reverts如回滚 simplify array change detection反映出 2.0 在响应式实现上先激进后收敛的历程——最终 Vue 2 的数组变更检测采用了对push/pop/shift/unshift/splice/sort/reverse等方法拦截的成熟方案见 src/core/observer/array.ts。结语一份变更记录的技术价值CHANGELOG 不是简单的版本流水账而是 Vue 2 近八年演进的一手档案。对仍在维护 Vue 2 项目特别是 2.7 的 Composition API 项目的开发者它能提供三条实用线索升级前对照Upgrade Guide 与依赖版本要求表vue-loader ^15.10.0、vue-demi ^0.13.1、Vue CLI 版本范围可以直接作为升级 checklist排障时溯源某个诡异行为往往能通过 CHANGELOG 中的 issue 编号与修复描述快速定位引入版本再对照 packages/compiler-sfc 与 src/core 源码理解根因特性边界确认Behavior Differences from Vue 3 与 NOT ported 清单划清了 2.7 的能力边界——在 2.7 里reactive(foo) foo是预期行为而createApp()和script setup顶层await则不可能出现避免把 Vue 3 的直觉误用到 Vue 2 上。2.7.16 Swan Song 为 Vue 2 画上了句号但这份 CHANGELOG 连同仓库中的源码与测试如 packages/compiler-sfc/test/compileScript.spec.ts、cssVars.spec.ts仍然是理解 Vue 2 内部机制、排查存量项目问题最可靠的参考。赞分享前端Web框架【免费下载链接】vueThis is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core项目地址https://gitcode.com/gh_mirrors/vu/vue点击查看免费下载相关推荐Riverpod 3.x 版本演进全解读从 CHANGELOG 看 Riverpod 的核心 API 变迁与实战迁移Riverpod 3.x 版本演进全解读从 CHANGELOG 看 Riverpod 的核心 API 变迁与实战迁移 Riverpod 是一个响应式缓存与数据前端移动开发svgr 版本演进全解析从 CHANGELOG 与源码看 8 个大版本的技术变迁与迁移要点svgr 版本演进全解析从 CHANGELOG 与源码看 8 个大版本的技术变迁与迁移要点 本文以仓库根目录的 CHANGELOG.md https://li前端开发工具hooks_riverpod 3.x 版本演进全解析从 CHANGELOG 看 Flutter Hooks 版 Riverpod 的 API 变迁与迁移指南hooks_riverpod 3.x 版本演进全解析从 CHANGELOG 看 Flutter Hooks 版 Riverpod 的 API 变迁与迁移指南前端移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考