Skip to content

Commit 808f317

Browse files
committed
Revision in guide/migration/global-api-treeshaking
1 parent 9f83414 commit 808f317

File tree

1 file changed

+22
-23
lines changed

1 file changed

+22
-23
lines changed

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

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

6-
# API Global Treeshaking <MigrationBadges :badges="$frontmatter.badges" />
6+
# TreeShaking da API Global <MigrationBadges :badges="$frontmatter.badges" />
77

8-
## Syntax 2.x
8+
## Sintaxe v2.x
99

1010
Se você já teve que manipular manualmente o DOM no Vue, pode ter encontrado este padrão:
1111

@@ -23,26 +23,26 @@ Ou, se você fez testes unitários em seu aplicativo envolvendo [componentes ass
2323
import { shallowMount } from '@vue/test-utils'
2424
import { MyComponent } from './MyComponent.vue'
2525

26-
test('an async feature', async () => {
26+
test('um recurso assíncrono', async () => {
2727
const wrapper = shallowMount(MyComponent)
2828

2929
// execute alguma tarefa relacionada ao DOM
3030

3131
await wrapper.vm.$nextTick()
3232

33-
// execute seus assertions
33+
// execute suas asserções
3434
})
3535
```
3636

3737
`Vue.nextTick()` é uma API global exposta diretamente em um único objeto Vue - na verdade, o método de instância `$nextTick()` é apenas um *wrapper* em torno de `Vue.nextTick()` com o contexto `this` do retorno de chamada automaticamente vinculado à instância atual por conveniência.
3838

39-
Mas e se você nunca teve que lidar com a manipulação manual do DOM, nem está usando ou testando componentes assíncronos em nosso aplicativo? Ou, e se, por qualquer motivo, você preferir usar o bom e velho `window.setTimeout ()` em vez disso? Nesse caso, o código para `nextTick()` se tornará um código morto - ou seja, o código que foi escrito, mas nunca usado. E o código morto dificilmente é uma coisa boa, especialmente em nosso contexto do lado do cliente, onde cada kilobyte é importante.
39+
Mas e se você nunca teve que lidar com manipulação manual do DOM, nem está usando ou testando componentes assíncronos em nosso aplicativo? Ou, e se, por qualquer motivo, você preferir usar o bom e velho `window.setTimeout()` em vez disso? Nesse caso, o código para `nextTick()` se tornará um código morto - ou seja, o código que foi escrito, mas nunca usado. E código morto dificilmente é uma coisa boa, especialmente em nosso contexto do lado do cliente, onde cada kilobyte é importante.
4040

41-
Os empacotadores de módulo, como o [webpack](https://webpack.js.org/), oferecem suporte à [tree-shaking](https://webpack.js.org/guides/tree-shaking/), que é um termo sofisticado para “eliminação de código morto”. Infelizmente, devido à forma como o código é escrito nas versões anteriores do Vue, APIs globais como `Vue.nextTick()` não podem ser *tree-shakeable* e serão incluídas no pacote final, independentemente de onde sejam realmente usadas ou não.
41+
Os empacotadores de módulo, como o [webpack](https://webpack.js.org/), oferecem suporte à [tree-shaking](https://webpack.js.org/guides/tree-shaking/), que é um termo sofisticado para “eliminação de código morto”. Infelizmente, devido à forma como o código é escrito nas versões anteriores do Vue, APIs globais como `Vue.nextTick()` não podem ser eliminadas com *tree-shaking* e serão incluídas no pacote final, independentemente de onde sejam realmente usadas ou não.
4242

43-
## Syntax 3.x
43+
## Sintaxe v3.x
4444

45-
No Vue 3, as APIs globais e internas foram reestruturadas tendo em mente o suporte para *tree-shakeable*. Como resultado, as APIs globais agora podem ser acessadas apenas como exportações nomeadas para a construção de Módulos ES. Por exemplo, nossos blocos de códigos anteriores agora devem ser semelhantes a este:
45+
No Vue 3, as APIs globais e internas foram reestruturadas tendo em mente o suporte à *tree-shaking*. Como resultado, as APIs globais agora podem ser acessadas apenas como exportações nomeadas para a construção de Módulos ES. Por exemplo, nossos blocos de códigos anteriores agora devem ser semelhantes a este:
4646

4747
```js
4848
import { nextTick } from 'vue'
@@ -59,35 +59,35 @@ import { shallowMount } from '@vue/test-utils'
5959
import { MyComponent } from './MyComponent.vue'
6060
import { nextTick } from 'vue'
6161

62-
test('an async feature', async () => {
62+
test('um recurso assíncrono', async () => {
6363
const wrapper = shallowMount(MyComponent)
6464

6565
// execute alguma tarefa relacionada ao DOM
6666

6767
await nextTick()
6868

69-
// execute seus assertions
69+
// execute suas asserções
7070
})
7171
```
7272

73-
Chamar `Vue.nextTick ()` diretamente agora resultará no abominável erro `undefined is not a function`.
73+
Chamar `Vue.nextTick()` diretamente agora resultará no abominável erro `undefined is not a function`.
7474

75-
Com essa mudança, com o bundler módulo suportando *tree-shaking*, APIs globais que não são usadas em seu aplicativo Vue serão eliminadas do pacote final, resultando em um tamanho ideal de arquivo.
75+
Com essa mudança, dado que o empacotador de módulos suporte *tree-shaking*, APIs globais que não são usadas em seu aplicativo Vue serão eliminadas do pacote final, resultando em um ótimo tamanho de arquivo.
7676

77-
## APIs afetadas
77+
## APIs Afetadas
7878

7979
Essas APIs globais no Vue 2.x são afetadas por esta mudança:
8080

8181
- `Vue.nextTick`
8282
- `Vue.observable` (substituído por `Vue.reactive`)
8383
- `Vue.version`
8484
- `Vue.compile` (apenas em compilações completas)
85-
- `Vue.set` (apenas em construções compactas)
86-
- `Vue.delete` (apenas em construções compactas)
85+
- `Vue.set` (apenas em compilações de compatibilidade)
86+
- `Vue.delete` (apenas em compilações de compatibilidade)
8787

8888
## Ajudantes Internos
8989

90-
Além das APIs públicas, muitos dos *components/helpers* internos agora também são exportados como exportações nomeadas. Isso permite que o compilador produza um código que importa apenas recursos quando eles são usados. Por exemplo, o seguinte template:
90+
Além das APIs públicas, muitos dos componentes/ajudantes internos agora também são exportados como exportações nomeadas. Isso permite que o compilador produza um código que importa apenas recursos quando eles são usados. Por exemplo, o seguinte template:
9191

9292
```html
9393
<transition>
@@ -105,18 +105,17 @@ export function render() {
105105
}
106106
```
107107

108-
Isso significa essencialmente que o componente `Transition` só é importado quando o aplicativo realmente faz uso dele.
109-
Em outras palavras, se o aplicativo não tiver nenhum componente `<transition>`, o código que suporta esse recurso não estará presente no pacote final.
108+
Isso significa essencialmente que o componente `Transition` só é importado quando o aplicativo realmente faz uso dele. Em outras palavras, se o aplicativo não tiver nenhum componente `<transition>`, o código que suporta esse recurso não estará presente no pacote final.
110109

111-
Com o *tree-shake* global, o usuário apenas “paga” pelos recursos que realmente usa. Melhor ainda, sabendo que os recursos opcionais não aumentarão o tamanho do pacote para aplicativos que não os utilizam, o tamanho do framework se tornou muito menos uma preocupação para recursos centrais adicionais no futuro, se é que o fará.
110+
Com o *tree-shaking* global, o usuário “paga” apenas pelos recursos que realmente usa. Melhor ainda, sabendo que os recursos opcionais não aumentarão o tamanho do pacote para aplicativos que não os utilizam, o tamanho do framework se tornou muito menos uma preocupação para recursos centrais adicionais no futuro, se é que o fará.
112111

113-
::: aviso importante
112+
::: warning Importante
114113
O que foi dito acima se aplica apenas as [Construções de Módulos ES](/guide/installation.html#explanation-of-different-builds) para uso com empacotadores capazes de aplicar *tree-shaking* - o construtor UMD ainda inclui todos os recursos e expõe tudo na variável global Vue (e o compilador produzirá a saída apropriada para usar APIs fora do global em vez de importar).
115114
:::
116115

117116
## Uso em Plugins
118117

119-
Se o seu plug-in depende de uma API global Vue 2.x afetada, por exemplo:
118+
Se o seu plug-in depende de uma API global do Vue 2.x afetada, por exemplo:
120119

121120
```js
122121
const plugin = {
@@ -142,7 +141,7 @@ const plugin = {
142141
}
143142
```
144143

145-
Se você usar um empacotador de módulo como webpack, isso pode fazer com que o código-fonte do Vue seja agrupado no plug-in e, na maioria das vezes, não é o que você esperava. Uma prática comum para evitar que isso aconteça é configurar o empacotador de módulo para excluir Vue do pacote final. No caso do webpack, você pode usar a opção de configuração [ʻexternals`] (https://webpack.js.org/configuration/externals/):
144+
Se você usar um empacotador de módulo como webpack, isso pode fazer com que o código-fonte do Vue seja agrupado no plug-in e, na maioria das vezes, não é o que você esperava. Uma prática comum para evitar que isso aconteça é configurar o empacotador de módulo para excluir Vue do pacote final. No caso do webpack, você pode usar a opção de configuração [`externals`](https://webpack.js.org/configuration/externals/):
146145

147146
```js
148147
// webpack.config.js
@@ -156,7 +155,7 @@ module.exports = {
156155

157156
Isso dirá ao webpack para tratar o módulo Vue como uma biblioteca externa e não empacotá-lo.
158157

159-
Se o empacotador de módulo de sua escolha for [Rollup] (https://rollupjs.org/), você basicamente obterá o mesmo efeito de graça, pois por padrão o Rollup tratará IDs de módulo absolutos (`'vue'` em nosso caso ) como dependências externas e não incluí-las no pacote final. No entanto, durante o empacotamento, ele pode emitir um aviso [“Tratando vue como dependência externa”] (https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency), que pode ser suprimido com a opção `external`:
158+
Se o empacotador de módulo de sua escolha for [Rollup](https://rollupjs.org/), você basicamente obterá o mesmo efeito de graça, pois por padrão o Rollup tratará IDs de módulo absolutos (`'vue'` em nosso caso) como dependências externas e não incluí-las no pacote final. No entanto, durante o empacotamento, ele pode emitir um aviso [“Tratando vue como dependência externa”](https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency), que pode ser suprimido com a opção `external`:
160159

161160
```js
162161
// rollup.config.js

0 commit comments

Comments
 (0)