- name
- vite-patterns
- description
- Vite build tool patterns including config, plugins, HMR, env variables, proxy setup, SSR, library mode, dependency pre-bundling, and build optimization. Activate when working with vite.config.ts, Vite plugins, or Vite-based projects.
- origin
- ECC
# Vite ãã¿ãŒã³
Vite 8+ ãããžã§ã¯ãã®ãã«ãããŒã«ããã³ãããããã¡ã³ããµãŒããŒã®ãã¿ãŒã³ãèšå®ãç°å¢å€æ°ããããã·èšå®ãã©ã€ãã©ãªã¢ãŒããäŸåé¢ä¿ã®äºåãã³ãã«ãäžè¬çãªæ¬çªç°å¢ã®èœãšã穎ãã«ããŒã
## 䜿çšããã¿ã€ãã³ã°
- `vite.config.ts` ãŸã㯠`vite.config.js` ãèšå®ãããšã
- ç°å¢å€æ°ãŸã㯠`.env` ãã¡ã€ã«ãèšå®ãããšã
- APIããã¯ãšã³ãçšã®ãããããã¡ã³ããµãŒããŒãããã·ãèšå®ãããšã
- ãã«ãåºåïŒãã£ã³ã¯ããããã¡ã€ãã¢ã»ããïŒãæé©åãããšã
- `build.lib` ã§ã©ã€ãã©ãªãå
¬éãããšã
- äŸåé¢ä¿ã®äºåãã³ãã«ãŸãã¯CJS/ESMçžäºéçšã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããããšã
- HMRããããããã¡ã³ããµãŒããŒããŸãã¯ãã«ããšã©ãŒããããã°ãããšã
- Viteãã©ã°ã€ã³ã®éžæãŸãã¯é åºä»ãããããšã
## åäœã®ä»çµã¿
- **ãããããã¡ã³ãã¢ãŒã**ã¯ãœãŒã¹ãã¡ã€ã«ããã€ãã£ãESMãšããŠæäŸããŸãïŒãã³ãã«ãªãïŒã倿ã¯ã¢ãžã¥ãŒã«ãªã¯ãšã¹ãããšã«ãªã³ããã³ãã§è¡ããããããã³ãŒã«ãã¹ã¿ãŒããéãHMRã粟確ã§ãã
- **ãã«ãã¢ãŒã**ã¯RolldownïŒv7+ïŒãŸãã¯RollupïŒv5ãv6ïŒã䜿çšããŠãããªãŒã·ã§ã€ãã³ã°ãã³ãŒãåå²ãOxcããŒã¹ã®ãããã¡ã€ã§ã¢ããªãæ¬çªçšã«ãã³ãã«ããŸãã
- **äŸåé¢ä¿ã®äºåãã³ãã«**ã¯esbuildãéããŠCJS/UMDäŸåé¢ä¿ãESMã«äžåºŠå€æããçµæã `node_modules/.vite` ã«ãã£ãã·ã¥ããŸããããã«ããåŸç¶ã®èµ·åã§ã¯åŠçãã¹ãããã§ããŸãã
- **ãã©ã°ã€ã³**ã¯ãããããã¡ã³ããšãã«ãã«ããã£ãŠçµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹ãå
±æããŸããåããã©ã°ã€ã³ãªããžã§ã¯ããããããããã¡ã³ããµãŒããŒã®ãªã³ããã³ãå€æãšæ¬çªãã€ãã©ã€ã³ã®äž¡æ¹ã§æ©èœããŸãã
- **ç°å¢å€æ°**ã¯ãã«ãæã«éçã«ã€ã³ã©ã€ã³åãããŸãã`VITE_` ãã¬ãã£ãã¯ã¹ä»ãã®å€æ°ã¯ãã³ãã«å
ã®ãããªãã¯å®æ°ã«ãªãããã¬ãã£ãã¯ã¹ãªãã®ãã®ã¯ã¯ã©ã€ã¢ã³ãã³ãŒãããèŠããŸããã
## äŸ
### èšå®ã®æ§é
#### åºæ¬èšå®
```typescript
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
resolve: {
alias: { '@': new URL('./src', import.meta.url).pathname },
},
})
```
#### æ¡ä»¶ä»ãèšå®
```typescript
// vite.config.ts
import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig(({ command, mode }) => {
const env = loadEnv(mode, process.cwd()) // VITE_ ãã¬ãã£ãã¯ã¹ã®ã¿ïŒå®å
šïŒ
return {
plugins: [react()],
server: command === 'serve' ? { port: 3000 } : undefined,
define: {
__API_URL__: JSON.stringify(env.VITE_API_URL),
},
}
})
```
#### äž»èŠãªèšå®ãªãã·ã§ã³
| ã㌠| ããã©ã«ã | 説æ |
|-----|---------|-------------|
| `root` | `'.'` | ãããžã§ã¯ãã«ãŒãïŒ`index.html` ã®å ŽæïŒ |
| `base` | `'/'` | ãããã€ãããã¢ã»ããã®ãããªãã¯ããŒã¹ãã¹ |
| `envPrefix` | `'VITE_'` | ã¯ã©ã€ã¢ã³ãã«å
¬éããç°å¢å€æ°ã®ãã¬ãã£ãã¯ã¹ |
| `build.outDir` | `'dist'` | åºåãã£ã¬ã¯ã㪠|
| `build.minify` | `'oxc'` | ãããã¡ã€ã¢ãŒïŒ`'oxc'`ã`'terser'`ããŸã㯠`false`ïŒ |
| `build.sourcemap` | `false` | `true`ã`'inline'`ããŸã㯠`'hidden'` |
### ãã©ã°ã€ã³
#### å¿
é ãã©ã°ã€ã³
ã»ãšãã©ã®ãã©ã°ã€ã³ã®ããŒãºã¯ãå°æ°ã®ãã管çãããããã±ãŒãžã§ã«ããŒã§ããŸããç¬èªã®ãã©ã°ã€ã³ãäœæããåã«ããããæ€èšããŠãã ããã
| ãã©ã°ã€ã³ | ç®ç | 䜿çšã¿ã€ãã³ã° |
|--------|---------|-------------|
| `@vitejs/plugin-react-swc` | SWCçµç±ã®React HMR + Fast Refresh | Reactã¢ããªã®ããã©ã«ãïŒBabelããªã¢ã³ãããé«éïŒ |
| `@vitejs/plugin-react` | Babelçµç±ã®React HMR + Fast Refresh | Babelãã©ã°ã€ã³ãå¿
èŠãªå Žåã®ã¿ïŒemotionãMobXãã³ã¬ãŒã¿ãŒïŒ |
| `@vitejs/plugin-vue` | Vue 3 SFCãµããŒã | Vueã¢ã㪠|
| `vite-plugin-checker` | ã¯ãŒã«ãŒã¹ã¬ããã§HMRãªãŒããŒã¬ã€ä»ãã® `tsc` + ESLintãå®è¡ | **TypeScriptã¢ããªå
šè¬** â Vite㯠`vite build` äžã«åãã§ãã¯ãè¡ããŸãã |
| `vite-tsconfig-paths` | `tsconfig.json` ã® `paths` ãšã€ãªã¢ã¹ãå°é | `tsconfig.json` ã«ãšã€ãªã¢ã¹ãæ¢ã«ããå Žå |
| `vite-plugin-dts` | ã©ã€ãã©ãªã¢ãŒãã§ `.d.ts` ãã¡ã€ã«ãåºå | TypeScriptã©ã€ãã©ãªãå
¬éãããšã |
| `vite-plugin-svgr` | SVGãReactã³ã³ããŒãã³ããšããŠã€ã³ããŒã | SVGãã³ã³ããŒãã³ããšããŠäœ¿çšããReactã¢ã㪠|
| `rollup-plugin-visualizer` | ãã³ãã«ã®ããªãŒããã/ãµã³ããŒã¹ãã¬ããŒã | 宿çãªãã³ãã«ãµã€ãºã®ç£æ»ïŒ`enforce: 'post'` ã䜿çšïŒ |
| `vite-plugin-pwa` | ãŒãèšå®ã®PWA + Workbox | ãªãã©ã€ã³å¯Ÿå¿ã¢ã㪠|
**éèŠãªæ³šæïŒ** `vite build` ã¯ãã©ã³ã¹ãã€ã«ããŸãããåãã§ãã¯ã¯è¡ããŸããã`vite-plugin-checker` ã远å ããããCIã§ `tsc --noEmit` ãå®è¡ããªãéããåãšã©ãŒã¯æ¬çªç°å¢ã«ãµã€ã¬ã³ãã«åºè·ãããŸãã
#### ã«ã¹ã¿ã ãã©ã°ã€ã³ã®äœæ
ã«ã¹ã¿ã ãã©ã°ã€ã³ã®äœæã¯çšã§ããã»ãšãã©ã®ããŒãºã¯æ¢åã®ãã©ã°ã€ã³ã§ã«ããŒã§ããŸããå¿
èŠãªå Žå㯠`vite.config.ts` ã«ã€ã³ã©ã€ã³ã§æžãå§ããåå©çšããå Žåã«ã®ã¿æœåºããŠãã ããã
```typescript
// vite.config.ts â æå°éã®ã€ã³ã©ã€ã³ãã©ã°ã€ã³
function myPlugin(): Plugin {
return {
name: 'my-plugin', // å¿
é ãäžæã§ãªããã°ãªããªã
enforce: 'pre', // 'pre' | 'post'ïŒãªãã·ã§ã³ïŒ
apply: 'build', // 'build' | 'serve'ïŒãªãã·ã§ã³ïŒ
transform(code, id) {
if (!id.endsWith('.custom')) return
return { code: transformCustom(code), map: null }
},
}
}
```
**äž»èŠããã¯ïŒ** `transform`ïŒãœãŒã¹ã®å€æŽïŒã`resolveId` + `load`ïŒä»®æ³ã¢ãžã¥ãŒã«ïŒã`transformIndexHtml`ïŒHTMLãžã®æ³šå
¥ïŒã`configureServer`ïŒãããããã¡ã³ãããã«ãŠã§ã¢ã®è¿œå ïŒã`hotUpdate`ïŒã«ã¹ã¿ã HMR â v7+ã§éæšå¥šã® `handleHotUpdate` ã®ä»£æ¿ïŒã
**ä»®æ³ã¢ãžã¥ãŒã«**㯠`\0` ãã¬ãã£ãã¯ã¹èŠçŽã䜿çšããŸã â `resolveId` 㯠`'\0virtual:my-id'` ãè¿ãããšã§ä»ã®ãã©ã°ã€ã³ãã¹ãããããŸãããŠãŒã¶ãŒã³ãŒã㯠`'virtual:my-id'` ãã€ã³ããŒãããŸãã
å®å
šãªãã©ã°ã€ã³API㯠[vite.dev/guide/api-plugin](https://vite.dev/guide/api-plugin) ãåç
§ããŠãã ãããéçºäžã®å€æãã€ãã©ã€ã³ã®ãããã°ã«ã¯ `vite-plugin-inspect` ã䜿çšããŠãã ããã
### HMR API
ãã¬ãŒã ã¯ãŒã¯ãã©ã°ã€ã³ïŒ`@vitejs/plugin-react`ã`@vitejs/plugin-vue` ãªã©ïŒã¯HMRãèªåçã«åŠçããŸããã«ã¹ã¿ã ç¶æ
ã¹ãã¢ããããããã¡ã³ãããŒã«ããŸãã¯æŽæ°ãè·šãã§ç¶æ
ãä¿æããå¿
èŠããããã¬ãŒã ã¯ãŒã¯éäŸåã®ãŠãŒãã£ãªãã£ããã«ãããå Žåã®ã¿ã`import.meta.hot` ãçŽæ¥äœ¿çšããŠãã ããã
```typescript
// src/store.ts â ããã©ã¢ãžã¥ãŒã«ã®æåHMR
if (import.meta.hot) {
// æŽæ°ãè·šãã§ç¶æ
ãä¿æããïŒ.dataãå代å
¥ãããå¿
ã倿ŽããããšïŒ
import.meta.hot.data.count = import.meta.hot.data.count ?? 0
// ã¢ãžã¥ãŒã«ã眮ãæããããåã«ãµã€ããšãã§ã¯ããã¯ãªãŒã³ã¢ãã
import.meta.hot.dispose((data) => clearInterval(data.intervalId))
// ãã®ã¢ãžã¥ãŒã«èªèº«ã®æŽæ°ãåãå
¥ãã
import.meta.hot.accept()
}
```
ãã¹ãŠã® `import.meta.hot` ã³ãŒãã¯æ¬çªãã«ãããããªãŒã·ã§ã€ã¯ãããŸã â ã¬ãŒããåé€ããå¿
èŠã¯ãããŸããã
### ç°å¢å€æ°
Vite㯠`.env`ã`.env.local`ã`.env.[mode]`ã`.env.[mode].local` ããã®é åºã§èªã¿èŸŒã¿ãŸãïŒåŸã®ãã®ãåã®ãã®ãäžæžãïŒã`*.local` ãã¡ã€ã«ã¯gitignoreãããŠãããããŒã«ã«ã®ã·ãŒã¯ã¬ããçšã§ãã
#### ã¯ã©ã€ã¢ã³ããµã€ãã¢ã¯ã»ã¹
`VITE_` ãã¬ãã£ãã¯ã¹ä»ãã®å€æ°ã®ã¿ãã¯ã©ã€ã¢ã³ãã³ãŒãã«å
¬éãããŸãïŒ
```typescript
import.meta.env.VITE_API_URL // string
import.meta.env.MODE // 'development' | 'production' | ã«ã¹ã¿ã
import.meta.env.BASE_URL // baseèšå®å€
import.meta.env.DEV // boolean
import.meta.env.PROD // boolean
import.meta.env.SSR // boolean
```
#### èšå®ã§ã®ç°å¢å€æ°äœ¿çš
```typescript
// vite.config.ts
import { defineConfig, loadEnv } from 'vite'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd()) // VITE_ ãã¬ãã£ãã¯ã¹ã®ã¿ïŒå®å
šïŒ
return {
define: {
__API_URL__: JSON.stringify(env.VITE_API_URL),
},
}
})
```
### ã»ãã¥ãªãã£
#### `VITE_` ãã¬ãã£ãã¯ã¹ã¯ã»ãã¥ãªãã£å¢çã§ã¯ãªã
`VITE_` ã§ãã¬ãã£ãã¯ã¹ããã倿°ã¯**ãã«ãæã«ã¯ã©ã€ã¢ã³ããã³ãã«ã«éçã«ã€ã³ã©ã€ã³åãããŸã**ããããã¡ã€ãbase64ãšã³ã³ãŒãããœãŒã¹ãããã®ç¡å¹åã§ã¯é ããŸãããæªæã®ããæ»æè
ã¯åºè·ãããJavaScriptããä»»æã® `VITE_` 倿°ãæœåºã§ããŸãã
**ã«ãŒã«ïŒ** ãããªãã¯ãªå€ïŒAPIã®URLããã£ãŒãã£ãŒãã©ã°ããããªãã¯ããŒïŒã®ã¿ã `VITE_` 倿°ã«å
¥ããŠãã ãããã·ãŒã¯ã¬ããïŒAPIããŒã¯ã³ãããŒã¿ããŒã¹ã®URLããã©ã€ããŒãããŒïŒã¯APIãŸãã¯ãµãŒããŒã¬ã¹é¢æ°ã®èåŸã«ãããµãŒããŒãµã€ãã«çœ®ããªããã°ãªããŸããã
#### `loadEnv('')` ã®èœãšã穎
```typescript
// BAD: 第3åŒæ°ãšã㊠'' ãæž¡ããšããµãŒããŒã®ã·ãŒã¯ã¬ãããå«ãå
šãŠã®ç°å¢å€æ°ãèªã¿èŸŒãŸãã
// `define` ã§ã¯ã©ã€ã¢ã³ãã³ãŒãã«ã€ã³ã©ã€ã³åã§ããŠããŸãã
const env = loadEnv(mode, process.cwd(), '')
// GOOD: æç€ºçãªãã¬ãã£ãã¯ã¹ãªã¹ã
const env = loadEnv(mode, process.cwd(), ['VITE_', 'APP_'])
```
#### æ¬çªç°å¢ã®ãœãŒã¹ããã
æ¬çªç°å¢ã®ãœãŒã¹ãããã¯ãªãªãžãã«ã®ãœãŒã¹ã³ãŒããæŒæŽ©ãããŸãããšã©ãŒãã©ãã«ãŒïŒSentryãBugsnagïŒã«ã¢ããããŒãããŠããŒã«ã«ã§åé€ããªãéããç¡å¹ã«ããŠãã ããïŒ
```typescript
build: {
sourcemap: false, // ããã©ã«ã â ãã®ãŸãŸã«ãã
}
```
#### `.gitignore` ãã§ãã¯ãªã¹ã
- `.env.local`ã`.env.*.local` â ããŒã«ã«ã®ã·ãŒã¯ã¬ãããªãŒããŒã©ã€ã
- `dist/` â ãã«ãåºå
- `node_modules/.vite` â äºåãã³ãã«ãã£ãã·ã¥ïŒå€ããšã³ããªã¯ãŽãŒã¹ããšã©ãŒãåŒãèµ·ããïŒ
### ãµãŒããŒãããã·
```typescript
// vite.config.ts â server.proxy
server: {
proxy: {
'/foo': 'http://localhost:4567', // æååã®ç瞮圢
'/api': {
target: 'http://localhost:8080',
changeOrigin: true, // ä»®æ³ãã¹ãããã¯ãšã³ãã«å¿
èŠ
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
}
```
WebSocketãããã·ã«ã¯ãã«ãŒãèšå®ã« `ws: true` ã远å ããŠãã ããã
### ãã«ãæé©å
#### æåãã£ã³ã¯
```typescript
// vite.config.ts â build.rolldownOptions
build: {
rolldownOptions: {
output: {
// ãªããžã§ã¯ã圢åŒïŒç¹å®ã®ããã±ãŒãžãã°ã«ãŒãå
manualChunks: {
'react-vendor': ['react', 'react-dom'],
'ui-vendor': ['@radix-ui/react-dialog', '@radix-ui/react-popover'],
},
},
},
}
```
```typescript
// 颿°åœ¢åŒïŒãã¥ãŒãªã¹ãã£ãã¯ã§åå²
manualChunks(id) {
if (id.includes('node_modules/react')) return 'react-vendor'
if (id.includes('node_modules')) return 'vendor'
}
```
### ããã©ãŒãã³ã¹
#### ãã¬ã«ãã¡ã€ã«ãé¿ãã
ãã¬ã«ãã¡ã€ã«ïŒãã£ã¬ã¯ããªãããã¹ãŠãåãšã¯ã¹ããŒããã `index.ts`ïŒã¯ã1ã€ã®ã·ã³ãã«ãã€ã³ããŒãããå Žåã§ãåãšã¯ã¹ããŒãããããã¡ã€ã«ããã¹ãŠèªã¿èŸŒãããšã匷å¶ããŸããããã¯å
¬åŒããã¥ã¡ã³ãã§ææãããŠãããããããã¡ã³ããµãŒããŒã®é床äœäžã®äž»ãªåå ã§ãã
```typescript
// BAD â 1ã€ã®ãŠãŒãã£ãªãã£ã®ã€ã³ããŒããViteã«ãã¬ã«å
šäœãèªã¿èŸŒãŸãã
import { slash } from '@/utils'
// GOOD â çŽæ¥ã€ã³ããŒãããã®ãã¡ã€ã«ã ããèªã¿èŸŒãŸãã
import { slash } from '@/utils/slash'
```
#### ã€ã³ããŒãæ¡åŒµåãæç€ºçã«ãã
æé»ã®æ¡åŒµåã¯ãããã `resolve.extensions` ãéããŠæå€§6åã®ãã¡ã€ã«ã·ã¹ãã ãã§ãã¯ã匷å¶ããŸããå€§èŠæš¡ãªã³ãŒãããŒã¹ã§ã¯ç©ã¿éãªããŸãã
```typescript
// BAD
import Component from './Component'
// GOOD
import Component from './Component.tsx'
```
`tsconfig.json` ã® `allowImportingTsExtensions` ãš `resolve.extensions` ãå®éã«äœ¿çšããæ¡åŒµåã ãã«çµã£ãŠãã ããã
#### ããããã¹ã«ãŒãã®ãŠã©ãŒã ã¢ãã
`server.warmup.clientFiles` ã¯ããã©ãŠã¶ããªã¯ãšã¹ãããåã«æ¢ç¥ã®ããããšã³ããªãäºå倿ããŸããããã«ããå€§èŠæš¡ã¢ããªã§ã®ã³ãŒã«ãããŒããªã¯ãšã¹ãã®ãŠã©ãŒã¿ãŒãã©ãŒã«ãè§£æ¶ãããŸãã
```typescript
// vite.config.ts
server: {
warmup: {
clientFiles: ['./src/main.tsx', './src/routes/**/*.tsx'],
},
}
```
#### é
ããããããã¡ã³ããµãŒããŒã®ãããã¡ã€ãªã³ã°
`vite dev` ãé
ããšæãããã`vite --profile` ããå§ããŠã¢ããªãæäœãã`p+enter` ãæŒã㊠`.cpuprofile` ãä¿åããŸãã[Speedscope](https://www.speedscope.app) ã§èªã¿èŸŒã¿ãã©ã®ãã©ã°ã€ã³ãæéãæ¶è²»ããŠãããã確èªããŸãïŒéåžžã¯ã³ãã¥ããã£ãã©ã°ã€ã³ã® `buildStart`ã`config`ããŸã㯠`configResolved` ããã¯ïŒã
### ã©ã€ãã©ãªã¢ãŒã
npmããã±ãŒãžãå
¬éããå Žå㯠`build.lib` ã䜿çšããŸããèšå®ã®è©³çްãããéèŠãª2ã€ã®èœãšã穎ããããŸãïŒ
1. **åã¯åºåãããŸãã** â `vite-plugin-dts` ã远å ããããå¥é `tsc --emitDeclarationOnly` ãå®è¡ããŠãã ããã
2. **ãã¢äŸåé¢ä¿ã¯å¿
ãå€éšåããªããã°ãªããŸãã** â ãªã¹ããããŠããªããã¢ãã©ã€ãã©ãªã«ãã³ãã«ããããšãã³ã³ã·ã¥ãŒããŒã§éè€ã©ã³ã¿ã€ã ãšã©ãŒãçºçããŸãã
```typescript
// vite.config.ts
build: {
lib: {
entry: 'src/index.ts',
formats: ['es', 'cjs'],
fileName: (format) => `my-lib.${format}.js`,
},
rolldownOptions: {
external: ['react', 'react-dom', 'react/jsx-runtime'], // ãã¹ãŠã®ãã¢äŸåé¢ä¿
},
}
```
### SSRå€éšå
ãã¢ã® `createServer({ middlewareMode: true })` ã®ã»ããã¢ããã¯ãã¬ãŒã ã¯ãŒã¯äœè
åãã§ããã»ãšãã©ã®ã¢ããªã¯NuxtãRemixãSvelteKitãAstroããŸãã¯TanStack Startã䜿çšãã¹ãã§ãããã¬ãŒã ã¯ãŒã¯ãŠãŒã¶ãŒãšããŠèª¿æŽããã®ã¯ãäŸåé¢ä¿ãSSRã§å£ããå Žåã®å€éšåèšå®ã§ãïŒ
```typescript
// vite.config.ts â SSRãªãã·ã§ã³
ssr: {
external: ['node-native-package'], // SSRãã³ãã«ã§ require() ãšããŠä¿æ
noExternal: ['esm-only-package'], // SSRåºåã«åŒ·å¶ãã³ãã«ïŒã»ãšãã©ã®SSRãšã©ãŒãä¿®æ£ïŒ
target: 'node', // 'node' ãŸã㯠'webworker'
}
```
### äŸåé¢ä¿ã®äºåãã³ãã«
Viteã¯äŸåé¢ä¿ãäºåãã³ãã«ããŠãCJS/UMDãESMã«å€æãããªã¯ãšã¹ãæ°ãåæžããŸãã
```typescript
// vite.config.ts â optimizeDeps
optimizeDeps: {
include: [
'lodash-es', // éãäŸåé¢ä¿ã匷å¶çã«äºåãã³ãã«
'cjs-package', // çžäºéçšåé¡ãåŒãèµ·ããCJSäŸåé¢ä¿
'deep-lib/components/**', // æ·±ãã€ã³ããŒãã®ã°ãã
],
exclude: ['local-esm-package'], // é€å€ããå Žåã¯æå¹ãªESMã§ãªããã°ãªããªã
force: true, // ãã£ãã·ã¥ãç¡èŠããŠåæé©åïŒäžæçãªãããã°ïŒ
}
```
### äžè¬çãªèœãšã穎
#### ãããããã¡ã³ããšãã«ããäžèŽããªã
ãããããã¡ã³ãã¯å€æã«esbuild/Rolldownã䜿çšãããã«ãã¯ãã³ãã«ã«Rolldownã䜿çšããŸããCJSã©ã€ãã©ãªã¯äž¡è
ã§ç°ãªãåäœãããå ŽåããããŸãããããã€åã«å¿
ã `vite build && vite preview` ã§ç¢ºèªããŠãã ããã
#### ãããã€åŸã®å€ããã£ã³ã¯
æ°ãããã«ãã¯æ°ãããã£ã³ã¯ããã·ã¥ãçæããŸããã¢ã¯ãã£ããªã»ãã·ã§ã³ãæã€ãŠãŒã¶ãŒã¯ããã¯ãååšããªãå€ããã¡ã€ã«åããªã¯ãšã¹ãããŸããViteã«ã¯çµã¿èŸŒã¿ã®è§£æ±ºçããããŸãããç·©åçïŒ
- ãããã€ã¡ã³ããŠã£ã³ããŠäžã¯å€ã `dist/assets/` ãã¡ã€ã«ãä¿æãã
- ã«ãŒã¿ãŒã§ãã€ãããã¯ã€ã³ããŒããšã©ãŒããã£ããããŠããŒãžããªããŒããã
#### Dockerãšã³ã³ãã
Viteã¯ããã©ã«ãã§ `localhost` ã«ãã€ã³ãããã³ã³ããã®å€ããã¯ã¢ã¯ã»ã¹ã§ããŸããïŒ
```typescript
// vite.config.ts â Docker/ã³ã³ããèšå®
server: {
host: true, // 0.0.0.0 ã«ãã€ã³ã
hmr: { clientPort: 3000 }, // ãªããŒã¹ãããã·çµç±ã®å Žå
}
```
#### ã¢ãã¬ãã®ãã¡ã€ã«ã¢ã¯ã»ã¹
Viteã¯ãããžã§ã¯ãã«ãŒããžã®ãã¡ã€ã«æäŸãå¶éããŸããã«ãŒãå€ã®ããã±ãŒãžã¯ãããã¯ãããŸãïŒ
```typescript
// vite.config.ts â ã¢ãã¬ãã®ãã¡ã€ã«ã¢ã¯ã»ã¹
server: {
fs: {
allow: ['..'], // 芪ãã£ã¬ã¯ããªïŒã¯ãŒã¯ã¹ããŒã¹ã«ãŒãïŒãèš±å¯
},
}
```
### ã¢ã³ããã¿ãŒã³
```typescript
// BAD: envPrefix ã '' ã«ãããšå
šãŠã®ç°å¢å€æ°ïŒã·ãŒã¯ã¬ãããå«ãïŒãã¯ã©ã€ã¢ã³ãã«å
¬éããã
envPrefix: ''
// BAD: ã¢ããªã±ãŒã·ã§ã³ãœãŒã¹ã³ãŒãã§ require() ãåããšæã蟌ã â Viteã¯ESMãã¡ãŒã¹ã
View on GitHub