Skip to content

Commit 26b7576

Browse files
authored
Migration > Global Api の翻訳を追従 (#261)
* fix: document migrating Vue.prototype to globalProperties vuejs/docs@7b110ff#diff-6661b581434177761e544ef3af1f1c035fad38946f1c8619e45840c5a8bf7941 * docs: mention accessing createApp from a CDN build vuejs/docs@567c9a8#diff-6661b581434177761e544ef3af1f1c035fad38946f1c8619e45840c5a8bf7941 * docs: small revisions to the global API migration guide vuejs/docs@e2c8359#diff-6661b581434177761e544ef3af1f1c035fad38946f1c8619e45840c5a8bf7941
1 parent 1afef5c commit 26b7576

File tree

1 file changed

+47
-17
lines changed

1 file changed

+47
-17
lines changed

src/guide/migration/global-api.md

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ badges:
55

66
# グローバル API <MigrationBadges :badges="$frontmatter.badges" />
77

8-
Vue 2.x では、グローバルに Vue の振る舞いを変更するグローバル API や設定が多数ありました。例えば、グローバルコンポーネントを作る際には、 以下のような `Vue.component` API を使用していました:
8+
Vue 2.x では、グローバルに Vue の振る舞いを変更するグローバル API や設定が多数ありました。例えば、グローバルコンポーネントを登録するには、 以下のような `Vue.component` API を使用します:
99

1010
```js
1111
Vue.component('button-counter', {
@@ -28,18 +28,18 @@ Vue.directive('focus', {
2828

2929
- グローバル設定を使用することで、テスト中に他のテストケースを誤って汚染しやすくなってしまいました。ユーザーは元のグローバル設定を保存し、各テスト後に元に戻すことを注意深くやる必要がありました (例 `Vue.config.errorHandler` のリセット)。`Vue.use` や、`Vue.mixin` のような API は、影響を元に戻す方法もありません。このため、プラグインを含むテストは特に厄介でした。実際、vue-test-utils はそれらに対応するために `createLocalVue` という特別な API を作らなければなりませんでした:
3030

31-
```js
32-
import { createLocalVue, mount } from '@vue/test-utils'
31+
```js
32+
import { createLocalVue, mount } from '@vue/test-utils'
3333

34-
// 拡張した `Vue` コンストラクタを作成
35-
const localVue = createLocalVue()
34+
// 拡張した `Vue` コンストラクタを作成
35+
const localVue = createLocalVue()
3636

37-
// "ローカル" Vue コンストラクタに、"グローバル" にプラグインをインストール
38-
localVue.use(MyPlugin)
37+
// "ローカル" Vue コンストラクタに、"グローバル" にプラグインをインストール
38+
localVue.use(MyPlugin)
3939

40-
// `localVue` をマウントオプションに渡す
41-
mount(Component, { localVue })
42-
```
40+
// `localVue` をマウントオプションに渡す
41+
mount(Component, { localVue })
42+
```
4343

4444
- また、グローバル設定では、同じページ上の複数のアプリケーション間でグローバル設定が異なる Vue のコピーを共有することが困難でした。
4545

@@ -65,7 +65,15 @@ import { createApp } from 'vue'
6565
const app = createApp({})
6666
```
6767

68-
アプリケーションインスタンスは、現在のグローバル API のサブセットを公開します。おおまかには、_Vue の振る舞いをグローバルに変更する全ての API は、アプリケーションインスタンスに移されます_ 。こちらは、現在のグローバル API とインスタンス API との対応表です:
68+
Vue の [CDN](/guide/installation.html#cdn) ビルドを使っている場合、 `createApp` はグローバルな `Vue` オブジェクトを介して公開されます:
69+
70+
```js
71+
const { createApp } = Vue
72+
73+
const app = createApp({})
74+
```
75+
76+
アプリケーションインスタンスは、 Vue 2 のグローバル API のサブセットを公開します。おおまかには、_Vue の振る舞いをグローバルに変更する全ての API は、アプリケーションインスタンスに移されます_ 。こちらは、 Vue 2 のグローバル API とインスタンス API との対応表です:
6977

7078
| 2.x グローバル API | 3.x インスタンス API (`app`) |
7179
| -------------------------- | ------------------------------------------------------------------------------------------------ |
@@ -76,6 +84,7 @@ const app = createApp({})
7684
| Vue.directive | app.directive |
7785
| Vue.mixin | app.mixin |
7886
| Vue.use | app.use ([以下を参照](#a-note-for-plugin-authors)) |
87+
| Vue.prototype | app.config.globalProperties ([以下を参照](#vue-prototype-replaced-by-config-globalproperties)) | |
7988

8089
グローバルに振る舞いを変更しないその他のグローバル API は [グローバル API の Treeshaking](./global-api-treeshaking.html) にあるように、名前付きエクスポートになりました。
8190

@@ -94,17 +103,36 @@ ES Modules ビルドでは、モジュールバンドラーと一緒に使用さ
94103
Vue.config.ignoredElements = ['my-el', /^ion-/]
95104

96105
// after
97-
const app = Vue.createApp({})
106+
const app = createApp({})
98107
app.config.isCustomElement = tag => tag.startsWith('ion-')
99108
```
100109

101110
::: tip 重要
102111

103-
Vue 3.0 では、要素がコンポーネントであるかどうかのチェックはコンパイルフェーズに移されたため、この設定はランタイムコンパイラを使用しているときにのみ尊重されます。ランタイム限定のビルドを使用している場合は、代わりにビルド設定で `isCustomElement``@vue/compiler-dom` に渡す必要があります - 例えば [`compilerOptions` option in vue-loader](https://vue-loader.vuejs.org/options.html#compileroptions) で。
112+
Vue 3 では、要素がコンポーネントであるかどうかのチェックはコンパイルフェーズに移されたため、この設定はランタイムコンパイラを使用しているときにのみ尊重されます。ランタイム限定のビルドを使用している場合は、代わりにビルド設定で `isCustomElement``@vue/compiler-dom` に渡す必要があります - 例えば [`compilerOptions` option in vue-loader](https://vue-loader.vuejs.org/options.html#compileroptions) で。
104113

105114
- ランタイム限定ビルド使用時に、`config.isCustomElement` が代入された場合、ビルドの設定でこのオプションを設定するように警告が表示されます。
106115
- これは、Vue CLI 設定の新しいトップレベルのオプションになります。
107-
:::
116+
:::
117+
118+
### `Vue.prototype``config.globalProperties` と置換
119+
120+
Vue 2 では、すべてのコンポーネントでアクセス可能なプロパティを追加するために、 `Vue.prototype` がよく使われていました。
121+
122+
Vue 3 では、 [`config.globalProperties`](/api/application-config.html#globalproperties) が同様のものです。これらのプロパティは、アプリケーション内でコンポーネントをインスタンス化する際にコピーされます:
123+
124+
```js
125+
// before - Vue 2
126+
Vue.prototype.$http = () => {}
127+
```
128+
129+
```js
130+
// after - Vue 3
131+
const app = createApp({})
132+
app.config.globalProperties.$http = () => {}
133+
```
134+
135+
また `globalProperties` の代わりに `provide` ([後述](#provide-inject)) を使うことも考えられます。
108136

109137
### プラグイン作者へのノート
110138

@@ -127,7 +155,7 @@ app.use(VueRouter)
127155

128156
## アプリケーションインスタンスのマウント
129157

130-
`createApp(/* オプション */)` で初期化した後、アプリケーションインスタンス `app` は、`app.mount(domTarget)` を使って Vue ルートインスタンスをマウントできます
158+
`createApp(/* オプション */)` で初期化した後、アプリケーションインスタンス `app` は、`app.mount(domTarget)` を使ってルートコンポーネントインスタンスをマウントできます
131159

132160
```js
133161
import { createApp } from 'vue'
@@ -178,6 +206,8 @@ export default {
178206
}
179207
```
180208

209+
`provide` を使うことは、特にプラグインを書くときに、 `globalProperties` の代わりになります。
210+
181211
## アプリケーション間での設定の共有
182212

183213
コンポーネントや、ディレクティブの設定をアプリケーション間で共有する方法の一つとして、以下のようなファクトリ関数があります:
@@ -189,7 +219,7 @@ import Bar from './Bar.vue'
189219

190220
const createMyApp = options => {
191221
const app = createApp(options)
192-
app.directive('focus' /* ... */)
222+
app.directive('focus', /* ... */)
193223

194224
return app
195225
}
@@ -198,4 +228,4 @@ createMyApp(Foo).mount('#foo')
198228
createMyApp(Bar).mount('#bar')
199229
```
200230

201-
このようにして、 `fucus` ディレクティブは Foo と Bar 両方のインスタンスとその子で有効になります。
231+
このようにして、 `fucus` ディレクティブは `Foo``Bar` 両方のインスタンスとその子で有効になります。

0 commit comments

Comments
 (0)