## 事象 [[Vite]] 2.7.13でビルドすると以下の事象が発生する。 - `[vite] new dependencies found: vue/server-renderer, updating...`と表示されてしばらく固まる - `tsconfig/sourceMap` について `Sourcemap for "パス" points to missing source files` エラーが出る [[🦉Owlelia]]周りで[[ESモジュール (JavaScript)|ESモジュール]]に関するエラーが出ていそう。 ``` owlelia doesn't appear to be written in CJS, but also doesn't appear to be a valid ES module (i.e. it doesn't have "type": "module" or an .mjs extension for the entry point). Please contact the package author to fix. ``` 実行時にvueファイルでもエラーが。。 ``` Uncaught TypeError: Cannot read properties of undefined (reading 'modules') at _sfc_main.setup (:3000/hoge/src/App.vue:32:15) ``` ### 補足 - [[Vite]] 2.6.13では動く ## [[🦉Owlelia]]のエラーについて ### 原因 [[🦉Owlelia]]が[[CommonJS]]でも[[ESモジュール (JavaScript)|ESモジュール]]でも書かれていないため読み込みができていないから。 - 基本的に[[CommonJS]]形式で`node_modules`配下に配置されているな.. - [[🦉Owlelia]]は[[ESモジュール (JavaScript)|ESモジュール]]形式.. ```json:package.json "main": "dist/index.js", "types": "dist/index.d.ts", ``` ```json:tsconfig.json "target": "es2015", "moduleResolution": "node", ``` - `main`に指定しているので[[CommonJS]]形式が期待されてそう? - [[tsconfig.json]]の[[module (tsconfig)|module]]は[[target (tsconfig)|target]]が`es2015`のため`CommonJS`にはならない - おそらく`es2015` - **なので成果物が[[ESモジュール (JavaScript)|ESモジュール]]形式になっている** ### 対策 [[package.json]]と[[tsconfig.json]]の記述を、[[CommonJS]]か[[ESモジュール (JavaScript)|ESモジュール]]のどちらかに統一する。両方サポートするのが一番良さそうだが、ひとまず万能の[[CommonJS]]形式で対応する。 [[tsconfig.json]]の[[module (tsconfig)|module]]を`CommonJS`にする。 ```diff:tsconfig.json "target": "es2015", + "module": "CommonJS", "moduleResolution": "node", ``` ## 実行時のエラーについて テンプレートの設定が少し古かったので最新にする。 ```diff:tsconfig.json - "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] ``` `tsconfig.node.json`が追加されている。 ```json:tsconfig.node.json { "compilerOptions": { "composite": true, "module": "esnext", "moduleResolution": "node" }, "include": ["vite.config.ts"] } ``` 一部モジュールのバージョンがかなり古いので最新にしてみる。 ```txt:最新のtemplate +-- @vitejs/[email protected] +-- [email protected] +-- [email protected] +-- [email protected] `-- [email protected] ``` ```txt:うまく動かないもの +-- @vitejs/[email protected] +-- [email protected] +-- [email protected] +-- [email protected] `-- [email protected] ``` [[vue-tsc]]と[[vitejs.plugin-vue]]を最新化。ついでに[[Vite]]も2.8にする。なおった! ## 参考 - [複数のモジュール形式\(CommonJS, ES Modules, UMD\)をサポートしたnpmパッケージの作り方 in TypeScript \- dackdive's blog](https://dackdive.hateblo.jp/entry/2019/09/23/100000)