Evan You 3 лет назад
Родитель
Сommit
89bd1c2056
1 измененных файлов с 81 добавлено и 0 удалено
  1. 81 0
      CHANGELOG.md

+ 81 - 0
CHANGELOG.md

@@ -1,5 +1,86 @@
 # [2.7.0](https://github.com/vuejs/vue/compare/v2.7.0-beta.8...v2.7.0) (2022-07-01)
 
+## Backported Features
+
+2.7 backports some of the most important features from Vue 3 so that Vue 2 users can benefit from them as well:
+
+- [Composition API](https://vuejs.org/guide/extras/composition-api-faq.html)
+- SFC [`<script setup>`](https://vuejs.org/api/sfc-script-setup.html)
+- SFC [CSS v-bind](https://vuejs.org/api/sfc-css-features.html#v-bind-in-css)
+
+In addition, the following APIs are also supported:
+
+- `defineComponent()` with improved type inference (compared to `Vue.extend`)
+- `h()`, `useSlot()`, `useAttrs()`, `useCssModules()`
+- `set()`, `del()` and `nextTick()` are also provided as named exports in ESM builds.
+- The `emits` option is also supported, but only for type-checking purposes (does not affect runtime behavior)
+
+  2.7 also supports using ESNext syntax in template expressions. When using a build system, the compiled template render function will go through the same loaders / plugins configured for normal JavaScript. This means if you have configured Babel for `.js` files, it will also apply to the expressions in your SFC templates.
+
+### Notes on API exposure
+
+- In ESM builds, these APIs are provided as named exports (and named exports only):
+
+  ```js
+  import Vue, { ref } from 'vue'
+
+  Vue.ref // undefined, use named export instead
+  ```
+
+- In UMD and CJS builds, these APIs are exposed as properties on the global `Vue` object.
+
+- When bundling with CJS builds externalized, bundlers should be able to handle ESM interop when externalizing CJS builds.
+
+### Behavior Differences from Vue 3
+
+The Composition API is backported using Vue 2's getter/setter-based reactivity system to ensure browser compatibility. This means there are some important behavior differences from Vue 3's proxy-based system:
+
+- All [Vue 2 change detection caveats](https://v2.vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats) still apply.
+
+- `reactive()`, `ref()`, and `shallowReactive()` will directly convert original objects instead of creating proxies. This means:
+
+  ```js
+  // true in 2.7, false in 3.x
+  reactive(foo) === foo
+  ```
+
+- `readonly()` **does** create a separate object, but it won't track newly added properties and does not work on arrays.
+
+- Avoid using arrays as root values in `reactive()` because without property access the array's mutation won't be tracked (this will result in a warning).
+
+- Reactivity APIs ignore properties with symbol keys.
+
+In addition, the following features are explicitly **NOT** ported:
+
+- ❌ `createApp()` (Vue 2 doesn't have isolated app scope)
+- ❌ Top-level `await` in `<script setup>` (Vue 2 does not support async component initialization)
+- ❌ TypeScript syntax in template expressions (incompatible w/ Vue 2 parser)
+- ❌ Reactivity transform (still experimental)
+- ❌ `expose` option is not supported for options components (but `defineExpose()` is supported in `<script setup>`).
+
+## Upgrade Guide
+
+### Vue CLI / webpack
+
+1. Upgrade local `@vue/cli-xxx` dependencies the latest version in your major version range (if applicable):
+
+   - `~4.5.18` for v4
+   - `~5.0.6` for v5
+
+2. Upgrade `vue` to `^2.7.0`. You can also remove `vue-template-compiler` from the dependencies - it is no longer needed in 2.7.
+
+   Note: if you are using `@vue/test-utils`, you may need to keep it in the dependencies for now, but this requirement will also be lifted in a new release of test utils.
+
+3. Check your package manager lockfile to ensure the following dependencies meet the version requirements. They may be transitive dependencies not listed in `package.json`.
+
+   - `vue-loader`: `^15.10.0`
+   - `vue-demi`: `^0.13.1`
+
+   If not, you will need to remove `node_modules` and the lockfile and perform a fresh install to ensure they are bumped to the latest version.
+
+4. If you were previously using [`@vue/composition-api`](https://github.com/vuejs/composition-api), update imports from it to `vue` instead. Note that some APIs exported by the plugin, e.g. `createApp`, are not ported in 2.7.
+
+5. The SFC compiler for 2.7 now uses PostCSS 8 (upgraded from 7). PostCSS 8 should be backwards compatible with most plugins, but the upgrade **may** cause issues if you were previously using a custom PostCSS plugin that can only work with PostCSS 7. In such cases, you will need to upgrade the relevant plugins to their PostCSS 8 compatible versions.
 
 ### Bug Fixes