You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/guide/migration/global-api-treeshaking.md
+22-23Lines changed: 22 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,9 +3,9 @@ badges:
3
3
- breaking
4
4
---
5
5
6
-
# API Global Treeshaking <MigrationBadges:badges="$frontmatter.badges" />
6
+
# TreeShaking da API Global <MigrationBadges:badges="$frontmatter.badges" />
7
7
8
-
## Syntax 2.x
8
+
## Sintaxe v2.x
9
9
10
10
Se você já teve que manipular manualmente o DOM no Vue, pode ter encontrado este padrão:
11
11
@@ -23,26 +23,26 @@ Ou, se você fez testes unitários em seu aplicativo envolvendo [componentes ass
23
23
import { shallowMount } from'@vue/test-utils'
24
24
import { MyComponent } from'./MyComponent.vue'
25
25
26
-
test('an async feature', async () => {
26
+
test('um recurso assíncrono', async () => {
27
27
constwrapper=shallowMount(MyComponent)
28
28
29
29
// execute alguma tarefa relacionada ao DOM
30
30
31
31
awaitwrapper.vm.$nextTick()
32
32
33
-
// execute seus assertions
33
+
// execute suas asserções
34
34
})
35
35
```
36
36
37
37
`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.
38
38
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.
40
40
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.
42
42
43
-
## Syntax 3.x
43
+
## Sintaxe v3.x
44
44
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:
46
46
47
47
```js
48
48
import { nextTick } from'vue'
@@ -59,35 +59,35 @@ import { shallowMount } from '@vue/test-utils'
59
59
import { MyComponent } from'./MyComponent.vue'
60
60
import { nextTick } from'vue'
61
61
62
-
test('an async feature', async () => {
62
+
test('um recurso assíncrono', async () => {
63
63
constwrapper=shallowMount(MyComponent)
64
64
65
65
// execute alguma tarefa relacionada ao DOM
66
66
67
67
awaitnextTick()
68
68
69
-
// execute seus assertions
69
+
// execute suas asserções
70
70
})
71
71
```
72
72
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`.
74
74
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.
76
76
77
-
## APIs afetadas
77
+
## APIs Afetadas
78
78
79
79
Essas APIs globais no Vue 2.x são afetadas por esta mudança:
80
80
81
81
-`Vue.nextTick`
82
82
-`Vue.observable` (substituído por `Vue.reactive`)
83
83
-`Vue.version`
84
84
-`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)
87
87
88
88
## Ajudantes Internos
89
89
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:
91
91
92
92
```html
93
93
<transition>
@@ -105,18 +105,17 @@ export function render() {
105
105
}
106
106
```
107
107
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.
110
109
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á.
112
111
113
-
::: aviso importante
112
+
::: warning Importante
114
113
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).
115
114
:::
116
115
117
116
## Uso em Plugins
118
117
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:
120
119
121
120
```js
122
121
constplugin= {
@@ -142,7 +141,7 @@ const plugin = {
142
141
}
143
142
```
144
143
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/):
146
145
147
146
```js
148
147
// webpack.config.js
@@ -156,7 +155,7 @@ module.exports = {
156
155
157
156
Isso dirá ao webpack para tratar o módulo Vue como uma biblioteca externa e não empacotá-lo.
158
157
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`:
0 commit comments