Skip to content

Características ​

No nível muito básico, o desenvolvimento do uso de vite não é tão diferente de usar um servidor de arquivos estático. No entanto, o Vite fornece muitos aprimoramentos sobre as importações de ESM nativas para suportar vários recursos que normalmente são vistos em configurações baseadas em Bundler.

NPM Dependência Resolução e pré-embrulho ​

As importações de ES nativas não suportam importações de módulos nus, como os seguintes:

js
import { someMethod } from 'my-dep'

O exposto acima lançará um erro no navegador. Vite detectará essas importações de módulos nuas em todos os arquivos de origem servidos e executará o seguinte:

  1. Preça- os para melhorar a velocidade de carregamento da página e converter módulos Commonjs / UMD em ESM. A etapa de pré-conclusão é realizada com o ESBuild e torna o tempo de início frio de Vite significativamente mais rápido do que qualquer empurrista baseado em JavaScript.

  2. Reescreva as importações para URLs válidos como /node_modules/.vite/deps/my-dep.js?v=f3sf2ebd para que o navegador possa importá -los corretamente.

Dependências são fortemente em cache

Vite Caches Solicitações de dependência por meio de cabeçalhos HTTP; portanto, se você deseja editar/depurar localmente uma dependência, siga as etapas aqui .

Substituição Do Módulo Quente ​

O Vite fornece uma API HMR sobre o ESM nativo. As estruturas com recursos de HMR podem aproveitar a API para fornecer atualizações instantâneas e precisas sem recarregar a página ou explodir o estado do aplicativo. O Vite fornece integrações de HMR em primeira parte para componentes de arquivo único VUE e reagirá uma atualização rápida . Também existem integrações oficiais para o Preact via @prefresh/vite .

Observe que você não precisa configurá -los manualmente - quando você cria um aplicativo via create-vite , os modelos selecionados já os teriam pré -configurados para você.

TypeScript ​

O Vite suporta a importação de .ts arquivos para fora da caixa.

Somente Transpile ​

Observe que o Vite executa apenas a transpilação em .ts arquivos e não executa a verificação do tipo. Ele pressupõe que a verificação do tipo seja atendida pelo seu processo de IDE e construção.

A razão pela qual o Vite não executa a verificação do tipo como parte do processo de transformação é porque os dois trabalhos funcionam fundamentalmente de maneira diferente. A transpilação pode funcionar por arquivo e se alinhar perfeitamente com o modelo de compilação sob demanda da Vite. Em comparação, a verificação do tipo requer conhecimento de todo o gráfico do módulo. O tipo de chifre de sapatos verifica o pipeline de transformação da Vite comprometerá inevitavelmente os benefícios de velocidade do Vite.

O trabalho de Vite é colocar seus módulos de origem em um formulário que possa ser executado no navegador o mais rápido possível. Para esse fim, recomendamos separar as verificações de análise estática do pipeline de transformação da Vite. Este princípio se aplica a outras verificações de análise estática, como Eslint.

  • Para construções de produção, você pode executar tsc --noEmit além do comando de construção da Vite.

  • Durante o desenvolvimento, se você precisar de mais do que Dicas de IDE, recomendamos a execução de tsc --noEmit --watch em um processo separado ou use -se-plugin-checker se você preferir ter erros de tipo diretamente relatados no navegador.

O Vite usa o ESBuild para transpilar o TypeScript em JavaScript, que é cerca de 20 ~ 30x mais rápido que a baunilha tsc , e as atualizações de HMR podem refletir no navegador em menos de 50ms.

Use as importações somente de tipo e a sintaxe de exportação para evitar problemas em potencial, como as importações somente de tipo, sendo incorretamente agrupadas, por exemplo:

ts
import type { T } from 'only/types'
export type { T }

Opções Do Compilador De Texto Datilografado ​

Alguns campos de configuração abaixo de compilerOptions em tsconfig.json requerem atenção especial.

isolatedModules ​

Deve ser definido como true .

É porque esbuild executa apenas a transpilação sem informações de tipo, ele não suporta certos recursos como const enum e importações implícitas apenas para tipos.

Você deve definir "isolatedModules": true no seu tsconfig.json abaixo de compilerOptions , para que o TS o avise contra os recursos que não funcionam com transpilação isolada.

Se uma dependência não funcionar bem com "isolatedModules": true . Você pode usar "skipLibCheck": true para suprimir temporariamente os erros até que ele seja corrigido a montante.

useDefineForClassFields ​

O valor padrão será true se o TypeScript Target for ES2022 ou mais recente, incluindo ESNext . É consistente com o comportamento do TypeScript 4.3.2+ . Outros alvos do TypeScript serão inadimplentes para false .

true é o comportamento padrão do tempo de execução do ECMAScript.

Se você estiver usando uma biblioteca que depende fortemente de campos de classe, tenha cuidado com o uso pretendido da biblioteca. Enquanto a maioria das bibliotecas espera "useDefineForClassFields": true , você pode definir explicitamente useDefineForClassFields a false se sua biblioteca não o suportar.

target ​

Vite ignora o valor target no tsconfig.json , seguindo o mesmo comportamento que esbuild .

Para especificar o destino no dev, a opção esbuild.target pode ser usada, que padrão é esnext para transpilação mínima. Em construções, a opção build.target tem prioridade mais alta acima de esbuild.target e também pode ser definida, se necessário.

useDefineForClassFields

Se target em tsconfig.json não for ESNext ou ES2022 ou mais recente, ou se não houver arquivo tsconfig.json , useDefineForClassFields será o padrão de false , o que pode ser problemático com o valor padrão esbuild.target de esnext . Ele pode transpilar blocos de inicialização estática que podem não ser suportados no seu navegador.

Como tal, é recomendável definir target a ESNext ou ES2022 ou mais recente, ou definir useDefineForClassFields a true explicitamente ao configurar tsconfig.json .

Outras Opções Do Compilador Que Afetam O Resultado Da Construção ​

skipLibCheck

Os modelos de partida do Vite têm "skipLibCheck": "true" por padrão para evitar dependências de escala de digitação, pois podem optar por suportar apenas versões e configurações específicas do TypeScript. Você pode aprender mais no VUEJS/VUE-CLI#5688 .

Tipos De Clientes ​

Os tipos padrão da Vite são para sua API Node.js. Para calçar o ambiente do código do lado do cliente em um aplicativo Vite, adicione um arquivo de declaração d.ts :

typescript
///<reference types="vite/client">
Using compilerOptions.types

Como alternativa, você pode adicionar vite/client a compilerOptions.types dentro de tsconfig.json :

tsconfig.json
json
{
  "compilerOptions": {
    "types": ["vite/client", "some-other-global-lib"]
  }
}

Observe que, se compilerOptions.types for especificado, apenas esses pacotes serão incluídos no escopo global (em vez de todos os pacotes visíveis "@Types").

vite/client fornece os seguintes calços do tipo:

  • Importações de ativos (por exemplo, importar um arquivo .svg )
  • Tipos para as constantes injetadas de vite em import.meta.env
  • Tipos para a API HMR em import.meta.hot

TIP

Para substituir a digitação padrão, adicione um arquivo de definição de tipo que contém suas tímidas. Em seguida, adicione a referência de tipo antes de vite/client .

Por exemplo, para tornar a importação padrão de *.svg um componente react:

  • vite-env-override.d.ts (o arquivo que contém suas tímidas):
    ts
    declare module '*.svg' {
      const content: React.FC<React.SVGProps<SVGElement>>
      export default content
    }
  • O arquivo que contém a referência a vite/client :
    ts
    ///<reference types="./vite-env-override.d.ts">
    ///<reference types="vite/client">

HTML ​

Os arquivos HTML ficam com a frente e o centro de um projeto vite, servindo como pontos de entrada para o seu aplicativo, simplificando a criação de aplicativos de página única e de várias páginas .

Quaisquer arquivos HTML no seu projeto Root podem ser acessados diretamente pelo seu respectivo caminho de diretório:

  • <root>/index.html -> http://localhost:5173/
  • <root>/about.html -> http://localhost:5173/about.html
  • <root>/blog/index.html -> http://localhost:5173/blog/index.html

Os ativos mencionados por elementos HTML como <script type="module" src> e <link href> são processados e agrupados como parte do aplicativo. A lista completa de elementos suportados está como abaixo:

  • <audio src>
  • <embed src>
  • <img src> e <img srcset>
  • <image src>
  • <input src>
  • <link href> e <link imagesrcset>
  • <object data>
  • <script type="module" src>
  • <source src> e <source srcset>
  • <track src>
  • <use href> e <use xlink:href>
  • <video src> e <video poster>
  • <meta content>
    • Somente se name atributo corresponder msapplication-tileimage , msapplication-square70x70logo , msapplication-square150x150logo , msapplication-wide310x150logo , msapplication-square310x310logo , msapplication-config ou twitter:image
    • Ou somente se property atributo corresponder og:image , og:image:url , og:image:secure_url , og:audio , og:audio:secure_url , og:video ou og:video:secure_url
html
<!doctype html>
<html>
  <head>
    <link rel="icon" href="/favicon.ico" />
    <link rel="stylesheet" href="/src/styles.css" />
  </head>
  <body>
    <img src="/src/images/logo.svg" alt="logo" />
    <script type="module" src="/src/main.js"></script>
  </body>
</html>

Para desativar o processamento HTML em certos elementos, você pode adicionar o atributo vite-ignore no elemento, que pode ser útil ao fazer referência a ativos externos ou CDN.

Estruturas ​

Todas as estruturas modernas mantêm integrações com o Vite. A maioria dos plug -ins -quadro é mantida por cada equipe da estrutura, com exceção dos plugins oficiais do Vue e React Vite que são mantidos na Org Vite:

Confira o guia dos plugins para obter mais informações.

JSX ​

.jsx e .tsx arquivos também são suportados para fora da caixa. A transpilação JSX também é tratada via Esbuild .

Sua estrutura de escolha já configurará o JSX proveniente da caixa (por exemplo, os usuários do VUE devem usar o plug-in oficial @vitejs/plugin-vue-jsx , que fornece recursos específicos do VUE 3, incluindo HMR, resolução de componentes globais, diretrizes e slots).

Se estiver usando o JSX com sua própria estrutura, jsxFactory e jsxFragment personalizados podem ser configurados usando a opção esbuild . Por exemplo, o plug -in PREACT usaria:

vite.config.js
js
import { 
defineConfig
} from 'vite'
export default
defineConfig
({
esbuild
: {
jsxFactory
: 'h',
jsxFragment
: 'Fragment',
}, })

Mais detalhes nos documentos da Esbuild .

Você pode injetar os ajudantes JSX usando jsxInject (que é uma opção exclusiva de vite) para evitar importações manuais:

vite.config.js
js
import { 
defineConfig
} from 'vite'
export default
defineConfig
({
esbuild
: {
jsxInject
: `import React from 'react'`,
}, })

CSS ​

A importação de .css arquivos injetará seu conteúdo na página por meio de uma tag <style> com suporte HMR.

@import Inlining and Rebasing ​

O Vite é pré-configurado para suportar o CSS @import em linha via postcss-import . Os aliases de vite também são respeitados pelo CSS @import . Além disso, todas as referências do CSS url() , mesmo que os arquivos importados estejam em diretórios diferentes, sejam sempre automaticamente replicados para garantir a correção.

@import Aliases e URL Rebasing também são suportados para SASS e menos arquivos (consulte Pré-processadores CSS ).

Postcss ​

Se o projeto contiver configuração PostCSS válida (qualquer formato suportado pelo POSTCSS-LOAD-CONFIG , por exemplo, postcss.config.js ), ele será aplicado automaticamente a todos os CSs importados.

Observe que a minificação do CSS será executada após o PostCSS e usará a opção build.cssTarget .

Módulos CSS ​

Qualquer arquivo CSS que termina com .module.css é considerado um arquivo de módulos CSS . Importar esse arquivo retornará o objeto do módulo correspondente:

example.module.css
css
.red {
  color: red;
}
js
import 'vite/client'
// ---corte---
import 
classes
from './example.module.css'
document
.
getElementById
('foo').
className
=
classes
.
red

O comportamento dos módulos CSS pode ser configurado através da opção css.modules .

Se css.modules.localsConvention estiver configurado para ativar os habitantes de camelcase (por exemplo, localsConvention: 'camelCaseOnly' ), você também pode usar as importações nomeadas:

js
import 'vite/client'
// ---corte---
// .Apply -cors -> ApplyColor
import { 
applyColor
} from './example.module.css'
document
.
getElementById
('foo').
className
=
applyColor

Pré-processadores CSS ​

Como apenas os navegadores modernos do Vite segmentam, é recomendável usar variáveis nativas CSS com plugins PostCSS que implementam rascunhos do CSSWG (por exemplo, CSS de Nesting de PostCSS ) e Author Future-Standards compatível com Standards.

Dito isto, o Vite fornece suporte interno para arquivos .scss , .sass , .less , .styl e .stylus . Não há necessidade de instalar plugins específicos de vite para eles, mas o próprio pré-processador correspondente deve ser instalado:

bash
# .Scss e .Sass
npm add -D sass-embedded # ou sass

# .menos
npm add -D less

# .STYL e .STYLUS
npm add -D stylus

Se estiver usando componentes de arquivo único VUE, isso também permite automaticamente <style lang="sass"> et al.

Vite melhora @import resolução para SASS e menos para que os aliases de vite também sejam respeitados. Além disso, as referências relativas url() dentro de arquivos SASS/menos importados que estão em diretórios diferentes do arquivo raiz também são automaticamente rebocados para garantir a correção.

@import Alias e URL Rebasing não são suportados para a caneta devido às suas restrições de API.

Você também pode usar os módulos CSS combinados com pré-processadores, antecendendo .module à extensão do arquivo, por exemplo style.module.scss .

Desativando a injeção de CSS na página ​

A injeção automática do conteúdo de CSS pode ser desligada através do parâmetro ?inline de consulta. Nesse caso, a sequência CSS processada é retornada como a exportação padrão do módulo como de costume, mas os estilos não são injetados na página.

js
import 'vite/client'
// ---corte---
import './foo.css' // será injetado na página
import 
otherStyles
from './bar.css?inline' // não será injetado

NOTE

As importações padrão e nomeadas dos arquivos CSS (por exemplo, import style from './foo.css' ) são removidas desde o Vite 5. Use a ?inline consulta.

Lightning CSS ​

A partir do Vite 4.4, há suporte experimental para o raio CSS . Você pode optar por ele adicionar css.transformer: 'lightningcss' ao seu arquivo de configuração e instalar a dependência opcional lightningcss :

bash
npm add -D lightningcss

Se ativado, os arquivos CSS serão processados pelo Lightning CSS em vez de PostCSS. Para configurá -lo, você pode passar as opções CSS Lightning para a opção de configuração css.lightningcss .

Para configurar os módulos CSS, você usará css.lightningcss.cssModules em vez de css.modules (que configura a maneira como o PostCSS lida com os módulos CSS).

Por padrão, o Vite usa o ESBuild para minimizar o CSS. O Lightning CSS também pode ser usado como o minificador CSS com build.cssMinify: 'lightningcss' .

NOTE

Os pré-processadores do CSS não são suportados ao usar CSS Lightning.

Ativos Estáticos ​

A importação de um ativo estático retornará o URL público resolvido quando for servido:

js
import 'vite/client'
// ---corte---
import 
imgUrl
from './img.png'
document
.
getElementById
('hero-img').src =
imgUrl

Consultas especiais podem modificar como os ativos são carregados:

js
import 'vite/client'
// ---corte---
// Carregue explicitamente ativos como URL
import 
assetAsURL
from './asset.js?url'
js
import 'vite/client'
// ---corte---
// Carregar ativos como cordas
import 
assetAsString
from './shader.glsl?raw'
js
import 'vite/client'
// ---corte---
// Carregar Trabalhadores Da Web
import 
Worker
from './worker.js?worker'
js
import 'vite/client'
// ---corte---
// Trabalhadores da web inlinados como strings base64 no horário de construção
import 
InlineWorker
from './worker.js?worker&inline'

Mais detalhes no manuseio de ativos estáticos .

JSON ​

Os arquivos JSON podem ser importados diretamente - as importações nomeadas também são suportadas:

js
import 'vite/client'
// ---corte---
// importar todo o objeto
import 
json
from './example.json'
// Importe um campo raiz como exportações nomeadas - ajuda com a troca de árvores! import {
field
} from './example.json'

Importação Glob ​

O Vite suporta a importação de vários módulos do sistema de arquivos por meio da função Special import.meta.glob :

js
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
('./dir/*.js')

O exposto acima será transformado no seguinte:

js
// Código produzido por Vite
const modules = {
  './dir/bar.js': () => import('./dir/bar.js'),
  './dir/foo.js': () => import('./dir/foo.js'),
}

Você pode iterar sobre as teclas do objeto modules para acessar os módulos correspondentes:

js
for (const path in modules) {
  modules[path]().then((mod) => {
    console.log(path, mod)
  })
}

Os arquivos correspondentes são, por padrão, carregados preguiçosos por importação dinâmica e serão divididos em pedaços separados durante a construção. Se você preferir importar todos os módulos diretamente (por exemplo, dependendo dos efeitos colaterais nesses módulos a serem aplicados primeiro), você pode passar como { eager: true } como o segundo argumento:

js
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
('./dir/*.js', {
eager
: true })

O exposto acima será transformado no seguinte:

js
// Código produzido por Vite
import * as __vite_glob_0_0 from './dir/bar.js'
import * as __vite_glob_0_1 from './dir/foo.js'
const modules = {
  './dir/bar.js': __vite_glob_0_0,
  './dir/foo.js': __vite_glob_0_1,
}

Múltiplos Padrões ​

O primeiro argumento pode ser uma variedade de globs, por exemplo

js
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
(['./dir/*.js', './another/*.js'])

Padrões Negativos ​

Os padrões negativos do glob também são suportados (prefixados com ! ). Para ignorar alguns arquivos do resultado, você pode adicionar padrões de exclusão do GLOB ao primeiro argumento:

js
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
(['./dir/*.js', '!**/bar.js'])
js
// Código produzido por Vite
const modules = {
  './dir/foo.js': () => import('./dir/foo.js'),
}

Nomeadas Importações ​

É possível importar apenas partes dos módulos com as import opções.

ts
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
('./dir/*.js', {
import
: 'setup' })
ts
// Código produzido por Vite
const modules = {
  './dir/bar.js': () => import('./dir/bar.js').then((m) => m.setup),
  './dir/foo.js': () => import('./dir/foo.js').then((m) => m.setup),
}

Quando combinado com eager , é possível ter o balanço de árvores ativado para esses módulos.

ts
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
('./dir/*.js', {
import
: 'setup',
eager
: true,
})
ts
// Código produzido por Vite:
import { setup as __vite_glob_0_0 } from './dir/bar.js'
import { setup as __vite_glob_0_1 } from './dir/foo.js'
const modules = {
  './dir/bar.js': __vite_glob_0_0,
  './dir/foo.js': __vite_glob_0_1,
}

Defina import a default para importar a exportação padrão.

ts
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
('./dir/*.js', {
import
: 'default',
eager
: true,
})
ts
// Código produzido por Vite:
import { default as __vite_glob_0_0 } from './dir/bar.js'
import { default as __vite_glob_0_1 } from './dir/foo.js'
const modules = {
  './dir/bar.js': __vite_glob_0_0,
  './dir/foo.js': __vite_glob_0_1,
}

Consultas Personalizadas ​

Você também pode usar a opção query para fornecer consultas às importações, por exemplo, para importar ativos como uma string ou como URL :

ts
import 'vite/client'
// ---corte---
const 
moduleStrings
= import.meta.
glob
('./dir/*.svg', {
query
: '?raw',
import
: 'default',
}) const
moduleUrls
= import.meta.
glob
('./dir/*.svg', {
query
: '?url',
import
: 'default',
})
ts
// Código produzido por Vite:
const moduleStrings = {
  './dir/bar.svg': () => import('./dir/bar.svg?raw').then((m) => m['default']),
  './dir/foo.svg': () => import('./dir/foo.svg?raw').then((m) => m['default']),
}
const moduleUrls = {
  './dir/bar.svg': () => import('./dir/bar.svg?url').then((m) => m['default']),
  './dir/foo.svg': () => import('./dir/foo.svg?url').then((m) => m['default']),
}

Você também pode fornecer consultas personalizadas para que outros plugins consumam:

ts
import 'vite/client'
// ---corte---
const 
modules
= import.meta.
glob
('./dir/*.js', {
query
: {
foo
: 'bar',
bar
: true },
})

Glob Importar Advertências ​

Observe que:

  • Este é um recurso exclusivo do Vite e não é um padrão da Web ou ES.
  • Os padrões do GLOB são tratados como especificadores de importação: eles devem ser relativos (iniciar com ./ ) ou absolutos (iniciar com / , resolvido em relação à raiz do projeto) ou um caminho de alias (consulte resolve.alias opção ).
  • A correspondência global é feita via tinyglobby .
  • Você também deve estar ciente de que todos os argumentos do import.meta.glob devem ser aprovados como literais . Você não pode usar variáveis ou expressões nelas.

Importação Dinâmica ​

Semelhante à importação global , o Vite também suporta importação dinâmica com variáveis.

ts
const module = await import(`./dir/${file}.js`)

Observe que as variáveis representam apenas os nomes de arquivos um nível de profundidade. Se file for 'foo/bar' , a importação falharia. Para uso mais avançado, você pode usar o recurso de importação global .

WebAssembly ​

.wasm arquivos pré-compilados podem ser importados com ?init . A exportação padrão será uma função de inicialização que retorna uma promessa do WebAssembly.Instance :

js
import 'vite/client'
// ---corte---
import 
init
from './example.wasm?init'
init
().
then
((
instance
) => {
instance
.
exports
.
test
()
})

A função init também pode tomar um objeto de importação que é repassado a WebAssembly.instantiate como seu segundo argumento:

js
import 'vite/client'
import 
init
from './example.wasm?init'
// ---corte---
init
({
imports
: {
someFunc
: () => {
/* ... */ }, }, }).
then
(() => {
/* ... */ })

Na construção da produção, .wasm arquivos menores que assetInlineLimit serão inlinhados como strings base64. Caso contrário, eles serão tratados como um ativo estático e buscados sob demanda.

NOTE

A proposta de integração de módulos ES de ES de WebAssembly não é suportada no momento. Use vite-plugin-wasm ou outros plugins comunitários para lidar com isso.

Acessando O Módulo WebAssembly ​

Se você precisar de acesso ao objeto Module , por exemplo, para instanciá -lo várias vezes, use uma importação explícita de URL para resolver o ativo e, em seguida, execute a instanciação:

js
import 'vite/client'
// ---corte---
import 
wasmUrl
from 'foo.wasm?url'
const
main
= async () => {
const
responsePromise
=
fetch
(
wasmUrl
)
const {
module
,
instance
} =
await WebAssembly.
instantiateStreaming
(
responsePromise
)
/* ... */ }
main
()

Buscando o módulo em node.js ​

No SSR, o fetch() que está acontecendo como parte da ?init importação pode falhar com TypeError: Invalid URL . Veja o suporte do problema WASM no SSR .

Aqui está uma alternativa, assumindo que a base do projeto seja o diretório atual:

js
import 'vite/client'
// ---corte---
import 
wasmUrl
from 'foo.wasm?url'
import {
readFile
} from 'node:fs/promises'
const
main
= async () => {
const
resolvedUrl
= (await import('./test/boot.test.wasm?url')).
default
const
buffer
= await
readFile
('.' +
resolvedUrl
)
const {
instance
} = await WebAssembly.
instantiate
(
buffer
, {
/* ... */ }) /* ... */ }
main
()

Trabalhadores Da Web ​

Importação com construtores ​

Um script do trabalhador da web pode ser importado usando new Worker() e new SharedWorker() . Comparado aos sufixos dos trabalhadores, essa sintaxe se aproxima dos padrões e é a maneira recomendada de criar trabalhadores.

ts
const worker = new Worker(new URL('./worker.js', import.meta.url))

O construtor de trabalhadores também aceita opções, que podem ser usadas para criar trabalhadores de "módulo":

ts
const worker = new Worker(new URL('./worker.js', import.meta.url), {
  type: 'module',
})

A detecção do trabalhador só funcionará se o construtor new URL() for usado diretamente dentro da declaração new Worker() . Além disso, todos os parâmetros de opções devem ser valores estáticos (ou seja, literais de string).

Importar Com Sufixos De Consulta ​

Um script do trabalhador da web pode ser importado diretamente anexando ?worker ou ?sharedworker à solicitação de importação. A exportação padrão será um construtor de trabalhador personalizado:

js
import 'vite/client'
// ---corte---
import 
MyWorker
from './worker?worker'
const
worker
= new
MyWorker
()

O script do trabalhador também pode usar as instruções ESM import em vez de importScripts() . NOTA : Durante o desenvolvimento, isso se baseia no suporte nativo do navegador , mas para a construção da produção é compilada.

Por padrão, o script do trabalhador será emitido como um pedaço separado na construção da produção. Se você deseja incluir o trabalhador como strings base64, adicione a consulta inline :

js
import 'vite/client'
// ---corte---
import 
MyWorker
from './worker?worker&inline'

Se você deseja recuperar o trabalhador como URL, adicione a consulta url :

js
import 'vite/client'
// ---corte---
import 
MyWorker
from './worker?worker&url'

Consulte as opções do trabalhador para obter detalhes sobre como configurar o agrupamento de todos os trabalhadores.

Política De Segurança De Conteúdo (Csp) ​

Para implantar CSP, certas diretrizes ou configurações devem ser definidas devido aos internos da Vite.

'nonce-{RANDOM}' ​

Quando html.cspNonce é definido, o Vite adiciona um atributo nonce com o valor especificado a qualquer tag <script> e <style> , além de <link> tags para folhas de estilo e pré -carregamento do módulo. Além disso, quando essa opção estiver definida, o Vite injetará uma meta -tag ( <meta property="csp-nonce" nonce="PLACEHOLDER" /> ).

O valor nonce de uma meta tag com property="csp-nonce" será usado pelo Vite sempre que necessário durante o dev e após a construção.

WARNING

Certifique -se de substituir o espaço reservado por um valor exclusivo para cada solicitação. Isso é importante para evitar a política de um recurso, que de outra forma pode ser facilmente feita.

data: ​

Por padrão, durante a compilação, vite os pequenos ativos como URIs de dados. Permitir data: para diretrizes relacionadas (por exemplo, img-src , font-src ), ou, desativá -lo por configuração build.assetsInlineLimit: 0 é necessário.

WARNING

Não permita data: para script-src . Isso permitirá a injeção de scripts arbitrários.

Construir Otimizações ​

Os recursos listados abaixo são aplicados automaticamente como parte do processo de compilação e não há necessidade de configuração explícita, a menos que você queira desativá -los.

Divisão do código CSS ​

O Vite extrai automaticamente o CSS usado pelos módulos em um pedaço assíncrono e gera um arquivo separado para ele. O arquivo CSS é carregado automaticamente por meio de uma tag <link> quando o chunk assíncrono associado é carregado e o chunk assíncrono é garantido apenas para ser avaliado após o carregamento do CSS para evitar o FOUC .

Se você preferir ter todo o CSS extraído em um único arquivo, você pode desativar a divisão de código CSS definindo build.cssCodeSplit a false .

Geração De Diretivas De Pré -Carga ​

O VITE gera automaticamente <link rel="modulepreload"> diretrizes para pedaços de entrada e suas importações diretas no HTML construído.

Otimização De Carregamento De Pedaços Assíncronos ​

Em aplicativos do mundo real, o Rollup geralmente gera pedaços "comuns" - o código compartilhado entre dois ou mais outros pedaços. Combinado com importações dinâmicas, é bastante comum ter o seguinte cenário:

Entry async chunk A common chunk C async chunk B dynamic import direct import

Nos cenários não otimizados, quando o chunk assíncrono A for importado, o navegador terá que solicitar e analisar A antes de descobrir que também precisa do pedaço comum C . Isso resulta em uma tira de redondão extra de rede:

Entry ---> A ---> C

O Vite reescreve automaticamente as chamadas de importação dinâmica de divisão de código com uma etapa de pré-carga para que, quando A for solicitado, C seja buscado em paralelo :

Entry ---> (A + C)

É possível que C tenha mais importações, o que resultará em ainda mais itens redondos no cenário não otimizado. A otimização da Vite rastreará todas as importações diretas para eliminar completamente as itens redondas, independentemente da profundidade de importação.

Released under the MIT License. (dev)