Appearance
Bâtir pour produire
Quand il est temps de déployer votre application pour la production, exécutez simplement la commande vite build
. Par défaut, elle utilise <root>/index.html
comme point d'entrée de la construction, et produit un paquet d'application qui est approprié pour être servi sur un service d'hébergement statique. Consultez la page Deploying a Static Site pour des guides sur les services les plus populaires.
Compatibilité avec les navigateurs
Le paquet de production suppose le support du JavaScript moderne. Par défaut, Vite cible les navigateurs qui prennent en charge les modules native ES Modules, native ESM dynamic import, et i
:
- Chrome >=87
- Firefox >=78
- Safari >=13
- Edge >=88
Vous pouvez spécifier des cibles personnalisées via l'option de configuration build.target
, où la cible la plus basse est es2015
.
Notez que par défaut, Vite ne gère que les transformations syntaxiques et ne couvre pas les polyfills par défaut. Vous pouvez consulter Polyfill.io qui est un service qui génère automatiquement des paquets polyfill basés sur la chaîne UserAgent du navigateur de l'utilisateur.
Les anciens navigateurs peuvent être pris en charge via @vitejs/plugin-legacy, qui génère automatiquement des chunks anciens et les polyfills correspondants pour les fonctionnalités du langage ES. Les chunks hérités sont chargés de manière conditionnelle uniquement dans les navigateurs qui n'ont pas de support ESM natif.
Chemin de base public
- Relié : Gestion des actifs
Si vous déployez votre projet sous un chemin public imbriqué, spécifiez simplement l'option de configuration base
et tous les chemins des ressources seront réécrits en conséquence. Cette option peut également être spécifiée en tant qu'option de ligne de commande, par exemple vite build --base=/my/public/path/
.
Les URLs des ressources importées en JS, les références CSS url()
, et les références des ressources dans vos fichiers .html
sont toutes automatiquement ajustées pour respecter cette option pendant la construction.
L'exception est lorsque vous devez concaténer dynamiquement des URLs à la volée. Dans ce cas, vous pouvez utiliser la variable i
injectée globalement qui sera le chemin de base public. Notez que cette variable est remplacée statiquement lors de la construction, elle doit donc apparaître exactement telle quelle (c'est-à-dire que i
ne fonctionnera pas).
Pour un contrôle avancé du chemin de base, consultez Advanced Base Options.
Personnalisation de la compilation
La compilation peut être personnalisée via diverses options de configuration de la compilation. Plus précisément, vous pouvez ajuster directement les options de rollup via build.rollupOptions
:
js
// vite.config.js
export default defineConfig({
build : {
rollupOptions : {
// https://rollupjs.org/guide/en/#big-list-of-options
}
}
})
Par exemple, vous pouvez spécifier plusieurs sorties Rollup avec des plugins qui ne sont appliqués que pendant la construction.
Stratégie de découpage
Vous pouvez configurer la façon dont les chunks sont divisés en utilisant build.rollupOptions.output.manualChunks
(voir Rollup docs). Jusqu'à Vite 2.8, la stratégie de découpage par défaut divisait les chunks en index
et vendor
. C'est une bonne stratégie pour certains SPAs, mais il est difficile de fournir une solution générale pour chaque cas d'utilisation de la cible Vite. A partir de Vite 2.9, manualChunks
n'est plus modifié par défaut. Vous pouvez continuer à utiliser la stratégie Split Vendor Chunk en ajoutant le splitVendorChunkPlugin
dans votre fichier de configuration :
js
// vite.config.js
import { splitVendorChunkPlugin } from 'vite'
export default defineConfig({
plugins: [splitVendorChunkPlugin()]
})
Cette stratégie est également fournie en tant que fabrique splitVendorChunk({ cache : SplitVendorChunkCache })
, au cas où une composition avec une logique personnalisée serait nécessaire. cache.reset()
doit être appelé à buildStart
pour que le mode veille de la construction fonctionne correctement dans ce cas.
Reconstruction sur les changements de fichiers
Vous pouvez activer l'observateur de rollup avec vite build --watch
. Ou, vous pouvez directement ajuster les WatcherOptions
sous-jacents via build.watch
:
js
// vite.config.js
export default defineConfig({
build : {
watch : {
// https://rollupjs.org/guide/en/#watch-options
}
}
})
Avec le drapeau --watch
activé, les changements apportés au fichier vite.config.js
, ainsi qu'à tout fichier à regrouper, déclencheront une reconstruction.
Application multi-pages
Supposons que vous ayez la structure de code source suivante :
├── package.json
├── vite.config.js
├─── index.html
├─── main.js
└─── imbriqué
├─── index.html
└─── nested.js
Pendant le dev, il suffit de naviguer ou de créer un lien vers /nested/
- cela fonctionne comme prévu, comme pour un serveur de fichiers statiques normal.
Pendant la construction, tout ce que vous avez à faire est de spécifier plusieurs fichiers .html
comme points d'entrée :
js
// vite.config.js
import { resolve } from 'path'
import { defineConfig } from 'vite'
export default defineConfig({
build: {
rollupOptions: {
input: {
main: resolve(__dirname, 'index.html'),
nested: resolve(__dirname, 'nested/index.html')
}
}
}
})
Si vous spécifiez une autre racine, rappelez-vous que __dirname
sera toujours le dossier de votre fichier vite.config.js lors de la résolution des chemins d'entrée. Par conséquent, vous devrez ajouter votre entrée root
aux arguments de resolve
.
Mode bibliothèque
Lorsque vous développez une bibliothèque orientée navigateur, vous passez probablement la plupart du temps sur une page de test/démonstration qui importe votre bibliothèque actuelle. Avec Vite, vous pouvez utiliser votre index.html
dans ce but pour obtenir une expérience de développement fluide.
Quand il est temps d'empaqueter votre bibliothèque pour la distribution, utilisez l'option de configuration build.lib
. Assurez-vous d'externaliser toutes les dépendances que vous ne voulez pas regrouper dans votre bibliothèque, par exemple vue
ou react
:
js
// vite.config.js
import { resolve } from 'path'
import { defineConfig } from 'vite'
export default defineConfig({
build: {
lib: {
// Could also be a dictionary or array of multiple entry points
entry: resolve(__dirname, 'lib/main.js'),
name: 'MyLib',
// the proper extensions will be added
fileName: 'my-lib'
},
rollupOptions: {
// make sure to externalize deps that shouldn't be bundled
// into your library
external: ['vue'],
output: {
// Provide global variables to use in the UMD build
// for externalized deps
globals: {
vue: 'Vue'
}
}
}
}
})
Le fichier d'entrée contient les exportations qui peuvent être importées par les utilisateurs de votre paquet :
js
// lib/main.js
import Foo from './Foo.vue'
import Bar from './Bar.vue'
export { Foo, Bar }
L'exécution de vite build
avec cette configuration utilise un préréglage Rollup qui est orienté vers l'expédition de bibliothèques et produit deux formats de paquets : es
et umd
(configurable via build.lib
) :
$ vite build
construction pour la production...
dist/my-lib.js 0.08 KiB / gzip : 0.07 KiB
dist/my-lib.umd.cjs 0.30 KiB / gzip : 0.16 KiB
Le package.json
recommandé pour votre lib :
json
{
"name": "my-lib",
"type": "module",
"files": ["dist"],
"main": "./dist/my-lib.umd.cjs",
"module": "./dist/my-lib.js",
"exports": {
".": {
"import": "./dist/my-lib.js",
"require": "./dist/my-lib.umd.cjs"
}
}
}
Ou, si vous exposez plusieurs points d'entrée :
json
{
"name": "my-lib",
"type": "module",
"files": ["dist"],
"main": "./dist/my-lib.cjs",
"module": "./dist/my-lib.mjs",
"exports": {
".": {
"import": "./dist/my-lib.mjs",
"require": "./dist/my-lib.cjs"
},
"./secondary": {
"import": "./dist/secondary.mjs",
"require": "./dist/secondary.cjs"
}
}
}
TIP
Si le package.json
ne contient pas "type" : "module"
, Vite générera des extensions de fichiers différentes pour la compatibilité Node.js. .js
deviendra .mjs
et .cjs
deviendra .js
.
Variables d'environnement
En mode bibliothèque, toutes les utilisations de i
sont remplacées statiquement lors de la construction pour la production. Cependant, l'usage p
ne l'est pas, de sorte que les consommateurs de votre bibliothèque peuvent le modifier dynamiquement. Si cela n'est pas souhaitable, vous pouvez utiliser define : {'p
NODE_ENV' : '"production"' }
par exemple pour les remplacer statiquement.
Options de base avancées
WARNING
Cette fonctionnalité est expérimentale, l'API peut changer dans un futur mineur sans suivre semver. Veuillez toujours rattacher la version de Vite à une version mineure lorsque vous l'utilisez.
Pour des cas d'utilisation avancés, les actifs déployés et les fichiers publics peuvent être dans des chemins différents, par exemple pour utiliser différentes stratégies de cache. Un utilisateur peut choisir de déployer dans trois chemins différents :
- les fichiers HTML d'entrée générés (qui peuvent être traités pendant le SSR)
- les actifs hachés générés (JS, CSS et autres types de fichiers comme les images)
- les [fichiers publics] copiés (assets.md#the-public-directory).
Une seule [base] statique (#public-base-path) n'est pas suffisante dans ces scénarios. Vite fournit un support expérimental pour les options de base avancées pendant la construction, en utilisant experimental.renderBuiltUrl
.
ts
experimental: {
renderBuiltUrl(filename: string, { hostType }: { hostType: 'js' | 'css' | 'html' }) {
if (hostType === 'js') {
return { runtime: `window.__toCdnUrl(${JSON.stringify(filename)})` }
} else {
return { relative: true }
}
}
}
Si les actifs hachés et les fichiers publics ne sont pas déployés ensemble, les options pour chaque groupe peuvent être définies indépendamment en utilisant l'actif type
inclus dans le second paramètre context
donné à la fonction.
ts
experimental: {
renderBuiltUrl(filename: string, { hostId, hostType, type }: { hostId: string, hostType: 'js' | 'css' | 'html', type: 'public' | 'asset' }) {
if (type === 'public') {
return 'https://www.domain.com/' + filename
}
else if (path.extname(hostId) === '.js') {
return { runtime: `window.__assetsPath(${JSON.stringify(filename)})` }
}
else {
return 'https://cdn.domain.com/assets/' + filename
}
}
}