Skip to content

Commit 57d5910

Browse files
authored
Merge pull request #139 from RyoNkmr/translatation-migraiton_global-api-treeshaking
Migration > Global API Treeshaking の翻訳
2 parents 6b0f033 + ffa9550 commit 57d5910

File tree

1 file changed

+37
-37
lines changed

1 file changed

+37
-37
lines changed

src/guide/migration/global-api-treeshaking.md

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@ badges:
33
- breaking
44
---
55

6-
# Global API Treeshaking <MigrationBadges :badges="$frontmatter.badges" />
6+
# グローバル API Treeshaking <MigrationBadges :badges="$frontmatter.badges" />
77

8-
## 2.x Syntax
8+
## 2.x での文法
99

10-
If you’ve ever had to manually manipulate DOM in Vue, you might have come across this pattern:
10+
手動で DOM 操作を行う必要があった場合に、このようなパターンを目にしたと思います:
1111

1212
```js
1313
import Vue from 'vue'
1414

1515
Vue.nextTick(() => {
16-
// something something DOM-related
16+
// DOM に関連した処理
1717
})
1818
```
1919

20-
Or, if you’ve been unit-testing an application involving [async components](/guide/component-dynamic-async.html), chances are you’ve written something like this:
20+
あるいは、[非同期コンポーネント](/guide/component-dynamic-async.html) に関わるアプリケーションのユニットテストを行う場合、次のように書いていたことでしょう:
2121

2222
```js
2323
import { shallowMount } from '@vue/test-utils'
@@ -26,33 +26,33 @@ import { MyComponent } from './MyComponent.vue'
2626
test('an async feature', async () => {
2727
const wrapper = shallowMount(MyComponent)
2828

29-
// execute some DOM-related tasks
29+
// DOM 関連の処理を実行
3030

3131
await wrapper.vm.$nextTick()
3232

33-
// run your assertions
33+
// アサーションの実行
3434
})
3535
```
3636

37-
`Vue.nextTick()` is a global API exposed directly on a single Vue object – in fact, the instance method `$nextTick()` is just a handy wrapper around `Vue.nextTick()` with the callback’s `this` context automatically bound to the current instance for convenience.
37+
`Vue.nextTick()` は、個々の Vue オブジェクトに直接公開されるグローバルな API です - 実際に、インスタンスメソッドである `$nextTick()` は、まさに `Vue.nextTick()` を利便性のため `this` のコンテキストをそのインスタンスに自動的にバインドされたコールバックと共にラップしたものです。
3838

39-
But what if you’ve never had to deal with manual DOM manipulation, nor are you using or testing async components in our app? Or, what if, for whatever reason, you prefer to use the good old `window.setTimeout()` instead? In such a case, the code for `nextTick()` will become dead code – that is, code that’s written but never used. And dead code is hardly a good thing, especially in our client-side context where every kilobyte matters.
39+
しかし、もし手動で DOM 操作を行う必要がなかったり、アプリケーション内で非同期コンポーネントを扱ったり、テストすることがない時はどうでしょうか?もしくは、どんな理由であれ、代わりに古き良き `window.setTimeout()` を使いたい時は?そのような場合に、`nextTick()` を使うコードはデッドコードになります。 - すなわち、書かれてあっても使われないということです。そして、とりわけファイルサイズが大切になるクライアント側においては、デッドコードは少なくともいいものではありません。
4040

41-
Module bundlers like [webpack](https://webpack.js.org/) support [tree-shaking](https://webpack.js.org/guides/tree-shaking/), which is a fancy term for "dead code elimination." Unfortunately, due to how the code is written in previous Vue versions, global APIs like `Vue.nextTick()` are not tree-shakeable and will be included in the final bundle regardless of where they are actually used or not.
41+
[webpack](https://webpack.js.org/) のようなモジュールバンドラーは、[tree-shaking](https://webpack.js.org/guides/tree-shaking/) と呼ばれる、聞こえの良い "不要コード削除" をサポートします。残念ながら Vue の過去のバージョンではコードの作りに起因して `Vue.nextTick()` のようなグローバル API は tree-shaking 可能ではなく、実際にどこで使われているかそうでないかに関わらず、最終成果物の中に含まれてしまいます。
4242

43-
## 3.x Syntax
43+
## 3.x での文法
4444

45-
In Vue 3, the global and internal APIs have been restructured with tree-shaking support in mind. As a result, the global APIs can now only be accessed as named exports for the ES Modules build. For example, our previous snippets should now look like this:
45+
Vue 3 では、グローバル API と内部 API は tree-shaking のサポートを念頭に置いて作り直されました。その結果、グローバル API は ES Modules ビルドの名前付きエクスポートとしてのみアクセスすることができます。例えば、以前のスニペットは次のようになります:
4646

4747
```js
4848
import { nextTick } from 'vue'
4949

5050
nextTick(() => {
51-
// something something DOM-related
51+
// DOM に関連した処理
5252
})
5353
```
5454

55-
and
55+
そして
5656

5757
```js
5858
import { shallowMount } from '@vue/test-utils'
@@ -62,40 +62,40 @@ import { nextTick } from 'vue'
6262
test('an async feature', async () => {
6363
const wrapper = shallowMount(MyComponent)
6464

65-
// execute some DOM-related tasks
65+
// DOM 関連の処理を実行
6666

6767
await nextTick()
6868

69-
// run your assertions
69+
// アサーションの実行
7070
})
7171
```
7272

73-
Calling `Vue.nextTick()` directly will now result in the infamous `undefined is not a function` error.
73+
`Vue.nextTick()` を直接呼び出すと、忌まわしい `undefined is not a function` エラーになるでしょう。
7474

75-
With this change, provided the module bundler supports tree-shaking, global APIs that are not used in a Vue application will be eliminated from the final bundle, resulting in an optimal file size.
75+
モジュールバンドラーが tree-shaking をサポートしているなら、この変更によって、Vue アプリケーション内で使用されていないグローバル API は最終成果物から削除され、最適なファイルサイズになります。
7676

77-
## Affected APIs
77+
## 影響を受ける API
7878

79-
These global APIs in Vue 2.x are affected by this change:
79+
この変更により、次の Vue 2.x のグローバル API が影響を受けます:
8080

8181
- `Vue.nextTick`
82-
- `Vue.observable` (replaced by `Vue.reactive`)
82+
- `Vue.observable` (`Vue.reactive` に置き換えられます)
8383
- `Vue.version`
84-
- `Vue.compile` (only in full builds)
85-
- `Vue.set` (only in compat builds)
86-
- `Vue.delete` (only in compat builds)
84+
- `Vue.compile` (完全ビルドのみ)
85+
- `Vue.set` (互換ビルドのみ)
86+
- `Vue.delete` (互換ビルドのみ)
8787

88-
## Internal Helpers
88+
## 内部ヘルパー
8989

90-
In addition to public APIs, many of the internal components/helpers are now exported as named exports as well. This allows the compiler to output code that only imports features when they are used. For example the following template:
90+
公開 API に加え、多くの内部コンポーネントや内部ヘルパーも同様に、名前付きエクスポートされるようになります。これにより、コンパイラは機能が使われたときにのみインポートするコードを生成できるようになります。例えば、次のテンプレートは:
9191

9292
```html
9393
<transition>
9494
<div v-show="ok">hello</div>
9595
</transition>
9696
```
9797

98-
is compiled into something similar to the following:
98+
次のようなコードにコンパイルされます:
9999

100100
```js
101101
import { h, Transition, withDirectives, vShow } from 'vue'
@@ -105,17 +105,17 @@ export function render() {
105105
}
106106
```
107107

108-
This essentially means the `Transition` component only gets imported when the application actually makes use of it. In other words, if the application doesn’t have any `<transition>` component, the code supporting this feature will not be present in the final bundle.
108+
これは `Transition` コンポーネントが、実際にアプリケーションで使われた時のみインポートされるということを本質的に意味します。言い換えると、もしアプリケーション内に `<transition>` がない場合は、その機能をサポートするコードは最終成果物の中には存在しなくなります。
109109

110-
With global tree-shaking, the user only "pay" for the features they actually use. Even better, knowing that optional features won't increase the bundle size for applications not using them, framework size has become much less a concern for additional core features in the future, if at all.
110+
グローバルな tree-shaking によって、ユーザは実際に使う機能についてのみ "支払い" ます。更に良いことに、オプションな機能はそれらが使われていないアプリケーションのバンドルサイズを増加させないということは、将来的に追加される機能がどんなものであれ、フレームワークのサイズによる懸念はずっと小さくなります。
111111

112-
::: warning Important
113-
The above only applies to the [ES Modules builds](/guide/installation.html#explanation-of-different-builds) for use with tree-shaking capable bundlers - the UMD build still includes all features and exposes everything on the Vue global variable (and the compiler will produce appropriate output to use APIs off the global instead of importing).
112+
::: warning 重要
113+
上記は、tree-shaking が可能な [ES Modules ビルド](/guide/installation.html#explanation-of-different-builds) の利用についてのみ適用されます - 依然として、UMD ビルドはすべての機能を含み、すべてがグローバル Vue 変数上に公開されます(そして、コンパイラはインポートに代えて、グローバルの API を使用して適切な成果物を生成します。)
114114
:::
115115

116-
## Usage in Plugins
116+
## プラグインでの用途
117117

118-
If your plugin relies on an affected Vue 2.x global API, for instance:
118+
例えば、もし影響を受ける Vue 2.x のグローバル API にプラグインが依存していた場合:
119119

120120
```js
121121
const plugin = {
@@ -127,7 +127,7 @@ const plugin = {
127127
}
128128
```
129129

130-
In Vue 3, you’ll have to import it explicitly:
130+
Vue 3 では、明示的にインポートしなければいけません:
131131

132132
```js
133133
import { nextTick } from 'vue'
@@ -141,7 +141,7 @@ const plugin = {
141141
}
142142
```
143143

144-
If you use a module bundle like webpack, this may cause Vue’s source code to be bundled into the plugin, and more often than not that’s not what you'd expect. A common practice to prevent this from happening is to configure the module bundler to exclude Vue from the final bundle. In webpack's case, you can use the [`externals`](https://webpack.js.org/configuration/externals/) configuration option:
144+
webpack のようなモジュールバンドラーを使っている時、プラグインに Vue のソースをバンドルされてしまう可能性があり、これは大抵の場合に望まれた結果ではありません。これを防ぐ一般的な方法は、最終成果物から Vue を除外するようにモジュールバンドラーを設定することです。webpack の場合、 [`externals`](https://webpack.js.org/configuration/externals/) という設定のオプションが利用できます:
145145

146146
```js
147147
// webpack.config.js
@@ -153,9 +153,9 @@ module.exports = {
153153
}
154154
```
155155

156-
This will tell webpack to treat the Vue module as an external library and not bundle it.
156+
これは、Vue モジュールを外部ライブラリとして扱い、バンドルしないように webpack に伝えます。
157157

158-
If your module bundler of choice happens to be [Rollup](https://rollupjs.org/), you basically get the same effect for free, as by default Rollup will treat absolute module IDs (`'vue'` in our case) as external dependencies and not include them in the final bundle. During bundling though, it might emit a ["Treating vue as external dependency"](https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency) warning, which can be suppressed with the `external` option:
158+
もし選んだバンドラーがたまたま [Rollup](https://rollupjs.org/) であったなら、Rollup はデフォルトで絶対モジュール ID(この場合には`'vue'`)を外部依存として扱い、それらを最終成果物に含めないため、元から設定無しに同じ効果が得られます。バンドル中、 ["Treating vue as external dependency"](https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency) という注意が出ることがありますが、これは `external` オプションで抑制できます:
159159

160160
```js
161161
// rollup.config.js

0 commit comments

Comments
 (0)