
npm run build を叩いたら error TS2339: Property 'env' does not exist on type 'ImportMeta'. が発生した
TypeScriptとVue3のキャッチアップのためにTodoリストを作っていた時に遭遇したエラー。
とりあえず機能を実装して、「いざビルドや!」と思って npm run build を叩いたら、
$ docker-compose run frontend npm run build
> todo@0.0.0 build
> run-p type-check "build-only {@}" --
> todo@0.0.0 build-only
> vite build
> todo@0.0.0 type-check
> vue-tsc --build --force
vite v5.3.3 building for production...
✓ 48 modules transformed.
dist/index.html 0.43 kB │ gzip: 0.29 kB
dist/assets/AboutView-C6Dx7pxG.css 0.09 kB │ gzip: 0.10 kB
dist/assets/index-Bb8bxnic.css 3.22 kB │ gzip: 1.08 kB
dist/assets/AboutView-QAvv8BwZ.js 0.22 kB │ gzip: 0.20 kB
dist/assets/index-DGIn98VC.js 90.26 kB │ gzip: 35.55 kB
✓ built in 2.38s
src/router/index.ts:5:41 - error TS2339: Property 'env' does not exist on type 'ImportMeta'.
5 history: createWebHistory(import.meta.env.VITE_BASE_URL),
~~~
Found 1 error.
ERROR: "type-check" exited with 1.
という感じでエラーが発生。
env.d.ts は下記のようにしており、
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_APP_TITLE: string;
readonly VITE_BASE_URL: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}
index.ts は下記のようにしていた。
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.VITE_BASE_URL),
routes: [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/about',
name: 'about',
// route level code-splitting
// this generates a separate chunk (About.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import('../views/AboutView.vue')
}
]
})
export default router
ChatGPT先生も、「 env.d.ts を作成して、vite/client の型定義を追加したら、 import.mete.env を認識させればOKや!」みたいな感じの答えしかなかった。
共有してくれたコードで修正しても解決せず。
Viteのエラーによるもの?
調べてみると、どうやらViteのissue9539にあるようにViteのバグ?っぽい。
そのうちの下記のコメントの通りに、 tsconfig.json の "complileOptions" に "types": ["node", "vite/client"] を追加したらエラーが発生せずビルドが完了した。
$ docker-compose run frontend npm run build
> todo@0.0.0 build
> run-p type-check "build-only {@}" --
> todo@0.0.0 build-only
> vite build
> todo@0.0.0 type-check
> vue-tsc --build --force
vite v5.3.3 building for production...
✓ 48 modules transformed.
dist/index.html 0.43 kB │ gzip: 0.29 kB
dist/assets/AboutView-C6Dx7pxG.css 0.09 kB │ gzip: 0.10 kB
dist/assets/index-Bb8bxnic.css 3.22 kB │ gzip: 1.08 kB
dist/assets/AboutView-QAvv8BwZ.js 0.22 kB │ gzip: 0.20 kB
dist/assets/index-DGIn98VC.js 90.26 kB │ gzip: 35.55 kB
✓ built in 2.31s
参照ドキュメント
Property 'env' does not exist on type 'ImportMeta' in 3.0.0 #9539
Property 'env' does not exist on type 'ImportMeta' in 3.0.0 · Issue #9539 · vitejs/vite · GitHub