Viteのコードを読む - ディレクトリ構造とテスト実行
(全然ブログ書いてなかった...)
Viteのコードを読んでみようという試み
Viteが盛り上がっていて個人的にも使っているので中身を少しでも把握したい。
大変だろうけど、バージョンが上がりまくって機能追加されてからだと中身追うのも無理になりそうなので、今のうちに見れるだけ見てみるという試み。心が折れたらやめるかもしれない。
読む対象
- v2.8.3
- hash: e2349569cf96e506e0d5fff1d043727a77fdad70
ファイル一覧を眺める
とりあえず何も考えずに tree
コマンドで列挙してみた
見てみる(クリックで展開)
. ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── docs │ ├── blog │ │ └── announcing-vite2.md │ ├── config │ │ └── index.md │ ├── guide │ │ ├── api-hmr.md │ │ ├── api-javascript.md │ │ ├── api-plugin.md │ │ ├── assets.md │ │ ├── backend-integration.md │ │ ├── build.md │ │ ├── comparisons.md │ │ ├── dep-pre-bundling.md │ │ ├── env-and-mode.md │ │ ├── features.md │ │ ├── index.md │ │ ├── migration.md │ │ ├── ssr.md │ │ ├── static-deploy.md │ │ ├── using-plugins.md │ │ └── why.md │ ├── images │ │ ├── bundler.png │ │ ├── esm.png │ │ ├── graph.png │ │ ├── vercel-configuration.png │ │ └── vite-plugin-inspect.png │ ├── index.md │ ├── plugins │ │ └── index.md │ └── public │ ├── _headers │ ├── cypress.svg │ ├── divriots.png │ ├── logo.svg │ ├── mux.svg │ ├── plaid.svg │ ├── stackblitz.svg │ ├── tailwind-labs.svg │ ├── vite.mp3 │ ├── voice.svg │ └── vuejobs.png ├── jest.config.ts ├── netlify.toml ├── package.json ├── packages │ ├── create-vite │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __tests__ │ │ │ └── cli.spec.ts │ │ ├── index.js │ │ ├── package.json │ │ ├── template-lit │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── favicon.svg │ │ │ │ └── my-element.js │ │ │ └── vite.config.js │ │ ├── template-lit-ts │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── favicon.svg │ │ │ │ ├── my-element.ts │ │ │ │ └── vite-env.d.ts │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.node.json │ │ │ └── vite.config.ts │ │ ├── template-preact │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── app.jsx │ │ │ │ ├── favicon.svg │ │ │ │ ├── index.css │ │ │ │ ├── logo.jsx │ │ │ │ └── main.jsx │ │ │ └── vite.config.js │ │ ├── template-preact-ts │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── app.tsx │ │ │ │ ├── favicon.svg │ │ │ │ ├── index.css │ │ │ │ ├── logo.tsx │ │ │ │ ├── main.tsx │ │ │ │ ├── preact.d.ts │ │ │ │ └── vite-env.d.ts │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.node.json │ │ │ └── vite.config.ts │ │ ├── template-react │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── App.css │ │ │ │ ├── App.jsx │ │ │ │ ├── favicon.svg │ │ │ │ ├── index.css │ │ │ │ ├── logo.svg │ │ │ │ └── main.jsx │ │ │ └── vite.config.js │ │ ├── template-react-ts │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── App.css │ │ │ │ ├── App.tsx │ │ │ │ ├── favicon.svg │ │ │ │ ├── index.css │ │ │ │ ├── logo.svg │ │ │ │ ├── main.tsx │ │ │ │ └── vite-env.d.ts │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.node.json │ │ │ └── vite.config.ts │ │ ├── template-svelte │ │ │ ├── README.md │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── jsconfig.json │ │ │ ├── package.json │ │ │ ├── public │ │ │ │ └── favicon.ico │ │ │ ├── src │ │ │ │ ├── App.svelte │ │ │ │ ├── assets │ │ │ │ │ └── svelte.png │ │ │ │ ├── lib │ │ │ │ │ └── Counter.svelte │ │ │ │ ├── main.js │ │ │ │ └── vite-env.d.ts │ │ │ └── vite.config.js │ │ ├── template-svelte-ts │ │ │ ├── README.md │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── public │ │ │ │ └── favicon.ico │ │ │ ├── src │ │ │ │ ├── App.svelte │ │ │ │ ├── assets │ │ │ │ │ └── svelte.png │ │ │ │ ├── lib │ │ │ │ │ └── Counter.svelte │ │ │ │ ├── main.ts │ │ │ │ └── vite-env.d.ts │ │ │ ├── svelte.config.js │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.node.json │ │ │ └── vite.config.ts │ │ ├── template-vanilla │ │ │ ├── _gitignore │ │ │ ├── favicon.svg │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ ├── package.json │ │ │ └── style.css │ │ ├── template-vanilla-ts │ │ │ ├── _gitignore │ │ │ ├── favicon.svg │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── main.ts │ │ │ │ ├── style.css │ │ │ │ └── vite-env.d.ts │ │ │ └── tsconfig.json │ │ ├── template-vue │ │ │ ├── README.md │ │ │ ├── _gitignore │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── public │ │ │ │ └── favicon.ico │ │ │ ├── src │ │ │ │ ├── App.vue │ │ │ │ ├── assets │ │ │ │ │ └── logo.png │ │ │ │ ├── components │ │ │ │ │ └── HelloWorld.vue │ │ │ │ └── main.js │ │ │ └── vite.config.js │ │ └── template-vue-ts │ │ ├── README.md │ │ ├── _gitignore │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ └── favicon.ico │ │ ├── src │ │ │ ├── App.vue │ │ │ ├── assets │ │ │ │ └── logo.png │ │ │ ├── components │ │ │ │ └── HelloWorld.vue │ │ │ ├── env.d.ts │ │ │ └── main.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── playground │ │ ├── alias │ │ │ ├── __tests__ │ │ │ │ └── alias.spec.ts │ │ │ ├── customResolver.js │ │ │ ├── dir │ │ │ │ ├── from-script-src.js │ │ │ │ ├── module │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── test.css │ │ │ │ └── test.js │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── test.js │ │ │ └── vite.config.js │ │ ├── assets │ │ │ ├── __tests__ │ │ │ │ └── assets.spec.ts │ │ │ ├── css │ │ │ │ ├── css-url.css │ │ │ │ ├── fonts.css │ │ │ │ ├── icons.css │ │ │ │ ├── import.css │ │ │ │ └── nested │ │ │ │ └── at-imported-css-url.css │ │ │ ├── fonts │ │ │ │ ├── Inter-Italic.woff │ │ │ │ └── Inter-Italic.woff2 │ │ │ ├── foo.js │ │ │ ├── index.html │ │ │ ├── nested │ │ │ │ ├── asset.png │ │ │ │ ├── fragment-bg.svg │ │ │ │ ├── fragment.svg │ │ │ │ ├── icon.png │ │ │ │ └── �\203\206�\202��\203\210-測試-white\ space.png │ │ │ ├── package.json │ │ │ ├── static │ │ │ │ ├── icon.png │ │ │ │ ├── import-expression.js │ │ │ │ ├── raw.css │ │ │ │ └── raw.js │ │ │ ├── vite.config.js │ │ │ └── �\203\206�\202��\203\210-測試-white\ space.js │ │ ├── backend-integration │ │ │ ├── __tests__ │ │ │ │ └── backend-integration.spec.ts │ │ │ ├── frontend │ │ │ │ ├── entrypoints │ │ │ │ │ ├── global.css │ │ │ │ │ ├── index.html │ │ │ │ │ └── main.ts │ │ │ │ ├── images │ │ │ │ │ └── logo.png │ │ │ │ └── styles │ │ │ │ ├── background.css │ │ │ │ └── tailwind.css │ │ │ ├── package.json │ │ │ ├── postcss.config.js │ │ │ ├── references.css │ │ │ ├── tailwind.config.js │ │ │ └── vite.config.js │ │ ├── cli │ │ │ ├── __tests__ │ │ │ │ ├── cli.spec.ts │ │ │ │ └── serve.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── cli-module │ │ │ ├── __tests__ │ │ │ │ ├── cli-module.spec.ts │ │ │ │ └── serve.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── css │ │ │ ├── __tests__ │ │ │ │ └── css.spec.ts │ │ │ ├── async-treeshaken.css │ │ │ ├── async-treeshaken.js │ │ │ ├── async.css │ │ │ ├── async.js │ │ │ ├── composed.module.css │ │ │ ├── composed.module.less │ │ │ ├── composed.module.scss │ │ │ ├── composes-path-resolving.module.css │ │ │ ├── css-dep │ │ │ │ ├── index.css │ │ │ │ ├── index.js │ │ │ │ ├── index.scss │ │ │ │ ├── index.styl │ │ │ │ └── package.json │ │ │ ├── dep.css │ │ │ ├── glob-dep │ │ │ │ ├── bar.css │ │ │ │ └── foo.css │ │ │ ├── glob-dep.css │ │ │ ├── imported-at-import.css │ │ │ ├── imported.css │ │ │ ├── index.html │ │ │ ├── inlined.css │ │ │ ├── less.less │ │ │ ├── linked-at-import.css │ │ │ ├── linked.css │ │ │ ├── main.js │ │ │ ├── minify.css │ │ │ ├── mod.module.css │ │ │ ├── mod.module.scss │ │ │ ├── nested │ │ │ │ ├── _index.scss │ │ │ │ ├── _partial.scss │ │ │ │ ├── icon.png │ │ │ │ ├── nested.less │ │ │ │ └── nested.styl │ │ │ ├── ok.png │ │ │ ├── options │ │ │ │ ├── absolute-import.styl │ │ │ │ └── relative-import.styl │ │ │ ├── package.json │ │ │ ├── pkg-dep │ │ │ │ ├── _index.scss │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── postcss-caching │ │ │ │ ├── blue-app │ │ │ │ │ ├── imported.css │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── postcss.config.js │ │ │ │ ├── css.spec.ts │ │ │ │ └── green-app │ │ │ │ ├── imported.css │ │ │ │ ├── index.html │ │ │ │ ├── main.js │ │ │ │ ├── package.json │ │ │ │ └── postcss.config.js │ │ │ ├── postcss.config.js │ │ │ ├── sass.scss │ │ │ ├── stylus.styl │ │ │ └── vite.config.js │ │ ├── css-codesplit │ │ │ ├── __tests__ │ │ │ │ └── css-codesplit.spec.ts │ │ │ ├── index.html │ │ │ ├── main.css │ │ │ ├── main.js │ │ │ ├── other.js │ │ │ ├── package.json │ │ │ ├── style.css │ │ │ └── vite.config.js │ │ ├── css-codesplit-cjs │ │ │ ├── __tests__ │ │ │ │ └── css-codesplit.spec.ts │ │ │ ├── index.html │ │ │ ├── main.css │ │ │ ├── main.js │ │ │ ├── other.js │ │ │ ├── package.json │ │ │ ├── style.css │ │ │ └── vite.config.js │ │ ├── data-uri │ │ │ ├── __tests__ │ │ │ │ └── data-uri.spec.ts │ │ │ ├── index.html │ │ │ └── package.json │ │ ├── define │ │ │ ├── __tests__ │ │ │ │ └── define.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── dynamic-import │ │ │ ├── __tests__ │ │ │ │ └── dynamic-import.spec.ts │ │ │ ├── css │ │ │ │ └── index.css │ │ │ ├── index.html │ │ │ ├── mxd.js │ │ │ ├── mxd.json │ │ │ ├── nested │ │ │ │ ├── index.js │ │ │ │ └── shared.js │ │ │ ├── package.json │ │ │ ├── qux.js │ │ │ ├── views │ │ │ │ ├── bar.js │ │ │ │ ├── baz.js │ │ │ │ └── foo.js │ │ │ └── vite.config.js │ │ ├── env │ │ │ ├── __tests__ │ │ │ │ └── env.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── extensions │ │ │ ├── __tests__ │ │ │ │ └── extensions.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── file-delete-restore │ │ │ ├── App.jsx │ │ │ ├── Child.jsx │ │ │ ├── __tests__ │ │ │ │ └── file-delete-restore.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── fs-serve │ │ │ ├── __tests__ │ │ │ │ └── fs-serve.spec.ts │ │ │ ├── entry.js │ │ │ ├── nested │ │ │ │ └── foo.js │ │ │ ├── package.json │ │ │ ├── root │ │ │ │ ├── src │ │ │ │ │ ├── index.html │ │ │ │ │ └── safe.txt │ │ │ │ ├── unsafe.txt │ │ │ │ └── vite.config.js │ │ │ ├── safe.json │ │ │ └── unsafe.json │ │ ├── glob-import │ │ │ ├── __tests__ │ │ │ │ └── glob-import.spec.ts │ │ │ ├── dir │ │ │ │ ├── baz.json │ │ │ │ ├── foo.js │ │ │ │ ├── index.js │ │ │ │ ├── nested │ │ │ │ │ └── bar.js │ │ │ │ └── node_modules │ │ │ │ └── hoge.js │ │ │ ├── index.html │ │ │ └── package.json │ │ ├── hmr │ │ │ ├── __tests__ │ │ │ │ └── hmr.spec.ts │ │ │ ├── customFile.js │ │ │ ├── global.css │ │ │ ├── hmr.js │ │ │ ├── hmrDep.js │ │ │ ├── hmrNestedDep.js │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── unicode-path │ │ │ │ └── 中�\226\207-�\201��\201��\202\223�\201\224-�\225\234�\200-�\237\214\225�\237\214\226�\237\214\227 │ │ │ │ └── index.html │ │ │ └── vite.config.js │ │ ├── html │ │ │ ├── __tests__ │ │ │ │ └── html.spec.ts │ │ │ ├── common.css │ │ │ ├── emptyAttr.html │ │ │ ├── foo.html │ │ │ ├── index.html │ │ │ ├── inline │ │ │ │ ├── common.js │ │ │ │ ├── dep1.js │ │ │ │ ├── dep2.js │ │ │ │ ├── dep3.js │ │ │ │ ├── module-graph.dot │ │ │ │ ├── shared-1.html │ │ │ │ ├── shared-2.html │ │ │ │ ├── shared.js │ │ │ │ ├── unique.html │ │ │ │ └── unique.js │ │ │ ├── invalid.html │ │ │ ├── link.html │ │ │ ├── main.css │ │ │ ├── main.js │ │ │ ├── nested │ │ │ │ ├── index.html │ │ │ │ ├── nested.css │ │ │ │ └── nested.js │ │ │ ├── noBody.html │ │ │ ├── noHead.html │ │ │ ├── package.json │ │ │ ├── scriptAsync.html │ │ │ ├── scriptMixed.html │ │ │ ├── shared.js │ │ │ ├── unicode-path │ │ │ │ └── 中�\226\207-�\201��\201��\202\223�\201\224-�\225\234�\200-�\237\214\225�\237\214\226�\237\214\227 │ │ │ │ └── index.html │ │ │ ├── vite.config.js │ │ │ └── zeroJS.html │ │ ├── json │ │ │ ├── __tests__ │ │ │ │ └── json.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── public │ │ │ │ └── public.json │ │ │ └── test.json │ │ ├── legacy │ │ │ ├── __tests__ │ │ │ │ ├── legacy.spec.ts │ │ │ │ └── ssr │ │ │ │ ├── legacy-ssr.spec.ts │ │ │ │ └── serve.js │ │ │ ├── async.js │ │ │ ├── entry-server.js │ │ │ ├── immutable-chunk.js │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ ├── package.json │ │ │ ├── style.css │ │ │ ├── vite.config-custom-filename.js │ │ │ └── vite.config.js │ │ ├── lib │ │ │ ├── __tests__ │ │ │ │ ├── lib.spec.ts │ │ │ │ └── serve.js │ │ │ ├── index.dist.html │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── main.js │ │ │ │ ├── main2.js │ │ │ │ └── message.js │ │ │ ├── vite.config.js │ │ │ └── vite.dyimport.config.js │ │ ├── multiple-entrypoints │ │ │ ├── __tests__ │ │ │ │ └── multiple-entrypoints.spec.ts │ │ │ ├── deps.json │ │ │ ├── dynamic-a.js │ │ │ ├── dynamic-b.js │ │ │ ├── entrypoints │ │ │ │ ├── a0.js │ │ │ │ ├── a1.js │ │ │ │ ├── a10.js │ │ │ │ ├── a11.js │ │ │ │ ├── a12.js │ │ │ │ ├── a13.js │ │ │ │ ├── a14.js │ │ │ │ ├── a15.js │ │ │ │ ├── a16.js │ │ │ │ ├── a17.js │ │ │ │ ├── a18.js │ │ │ │ ├── a19.js │ │ │ │ ├── a2.js │ │ │ │ ├── a20.js │ │ │ │ ├── a21.js │ │ │ │ ├── a22.js │ │ │ │ ├── a23.js │ │ │ │ ├── a24.js │ │ │ │ ├── a3.js │ │ │ │ ├── a4.js │ │ │ │ ├── a5.js │ │ │ │ ├── a6.js │ │ │ │ ├── a7.js │ │ │ │ ├── a8.js │ │ │ │ └── a9.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── reference.js │ │ │ ├── reference.scss │ │ │ └── vite.config.js │ │ ├── nested-deps │ │ │ ├── __tests__ │ │ │ │ └── nested-deps.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── test-package-a │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── test-package-b │ │ │ │ ├── index.js │ │ │ │ ├── node_modules │ │ │ │ │ └── test-package-a │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── test-package-c │ │ │ │ ├── index-es.js │ │ │ │ ├── index.js │ │ │ │ ├── package.json │ │ │ │ └── side.js │ │ │ ├── test-package-d │ │ │ │ ├── index.js │ │ │ │ ├── package.json │ │ │ │ └── test-package-d-nested │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── test-package-e │ │ │ │ ├── index.js │ │ │ │ ├── package.json │ │ │ │ ├── test-package-e-excluded │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ └── test-package-e-included │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ └── vite.config.js │ │ ├── optimize-deps │ │ │ ├── __tests__ │ │ │ │ └── optimize-deps.spec.ts │ │ │ ├── cjs-dynamic.js │ │ │ ├── cjs.js │ │ │ ├── dedupe.js │ │ │ ├── dep-cjs-compiled-from-cjs │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── dep-cjs-compiled-from-esm │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── dep-esbuild-plugin-transform │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── dep-linked │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── dep-linked-include │ │ │ │ ├── Test.vue │ │ │ │ ├── foo.js │ │ │ │ ├── index.mjs │ │ │ │ ├── package.json │ │ │ │ └── test.css │ │ │ ├── glob │ │ │ │ └── foo.js │ │ │ ├── index.html │ │ │ ├── nested-exclude │ │ │ │ ├── index.js │ │ │ │ ├── nested-include │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── optimize-missing-deps │ │ │ ├── __test__ │ │ │ │ ├── optimize-missing-deps.spec.ts │ │ │ │ └── serve.js │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ ├── missing-dep │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── multi-entry-dep │ │ │ │ ├── index.browser.js │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── package.json │ │ │ └── server.js │ │ ├── package.json │ │ ├── preload │ │ │ ├── __tests__ │ │ │ │ └── preload.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── router.js │ │ │ ├── src │ │ │ │ ├── App.vue │ │ │ │ └── components │ │ │ │ ├── About.vue │ │ │ │ ├── Hello.vue │ │ │ │ └── Home.vue │ │ │ └── vite.config.js │ │ ├── preserve-symlinks │ │ │ ├── __tests__ │ │ │ │ └── preserve-symlinks.spec.ts │ │ │ ├── index.html │ │ │ ├── moduleA │ │ │ │ ├── linked.js -> ./src/index.js │ │ │ │ ├── package.json │ │ │ │ └── src │ │ │ │ ├── data.js │ │ │ │ └── index.js │ │ │ ├── package.json │ │ │ └── src │ │ │ └── main.js │ │ ├── react │ │ │ ├── App.jsx │ │ │ ├── __tests__ │ │ │ │ └── react.spec.ts │ │ │ ├── components │ │ │ │ └── Dummy.jsx │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ └── vite.config.ts │ │ ├── react-emotion │ │ │ ├── App.jsx │ │ │ ├── __tests__ │ │ │ │ └── react.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ └── vite.config.ts │ │ ├── resolve │ │ │ ├── __tests__ │ │ │ │ └── resolve.spec.ts │ │ │ ├── browser-field │ │ │ │ ├── multiple.dot.path.js │ │ │ │ ├── no-ext-index │ │ │ │ │ └── index.js │ │ │ │ ├── no-ext.js │ │ │ │ ├── not-browser.js │ │ │ │ ├── out │ │ │ │ │ ├── cjs.node.js │ │ │ │ │ └── esm.browser.js │ │ │ │ ├── package.json │ │ │ │ └── relative.js │ │ │ ├── config-dep.js │ │ │ ├── custom-condition │ │ │ │ ├── index.custom.js │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── custom-ext.es │ │ │ ├── custom-main-field │ │ │ │ ├── index.custom.js │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── dir │ │ │ │ └── index.js │ │ │ ├── dir-with-ext │ │ │ │ └── index.js │ │ │ ├── dir-with-ext.js │ │ │ │ └── empty │ │ │ ├── dir.js │ │ │ ├── exact-extension │ │ │ │ ├── file.js │ │ │ │ └── file.js.js │ │ │ ├── exports-env │ │ │ │ ├── browser.js │ │ │ │ ├── browser.mjs │ │ │ │ ├── browser.prod.mjs │ │ │ │ ├── fallback.umd.js │ │ │ │ └── package.json │ │ │ ├── exports-path │ │ │ │ ├── cjs.js │ │ │ │ ├── deep.js │ │ │ │ ├── dir │ │ │ │ │ └── dir.js │ │ │ │ ├── main.js │ │ │ │ └── package.json │ │ │ ├── index.html │ │ │ ├── inline-package │ │ │ │ ├── inline.js │ │ │ │ └── package.json │ │ │ ├── package.json │ │ │ ├── ts-extension │ │ │ │ ├── hello.ts │ │ │ │ └── index.ts │ │ │ ├── utf8-bom │ │ │ │ └── main.js │ │ │ ├── util │ │ │ │ ├── bar.util.js │ │ │ │ └── index.js │ │ │ └── vite.config.js │ │ ├── resolve-config │ │ │ ├── __tests__ │ │ │ │ ├── resolve-config.spec.ts │ │ │ │ └── serve.js │ │ │ ├── package.json │ │ │ └── root │ │ │ ├── index.js │ │ │ └── vite.config.js │ │ ├── resolve-linked │ │ │ ├── dep.js │ │ │ ├── package.json │ │ │ └── src │ │ │ └── index.js │ │ ├── shims.d.ts │ │ ├── ssr-deps │ │ │ ├── __tests__ │ │ │ │ ├── serve.js │ │ │ │ └── ssr-deps.spec.ts │ │ │ ├── define-properties-exports │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── define-property-exports │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── forwarded-export │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── index.html │ │ │ ├── message │ │ │ ├── object-assigned-exports │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── only-object-assigned-exports │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── package.json │ │ │ ├── primitive-export │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── read-file-content │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── require-absolute │ │ │ │ ├── foo.js │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── server.js │ │ │ ├── src │ │ │ │ └── app.js │ │ │ └── ts-transpiled-exports │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── ssr-html │ │ │ ├── __tests__ │ │ │ │ ├── serve.js │ │ │ │ └── ssr-html.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── server.js │ │ │ └── src │ │ │ └── app.js │ │ ├── ssr-pug │ │ │ ├── __tests__ │ │ │ │ ├── serve.js │ │ │ │ └── ssr-pug.spec.ts │ │ │ ├── index.pug │ │ │ ├── package.json │ │ │ ├── server.js │ │ │ └── src │ │ │ └── app.js │ │ ├── ssr-react │ │ │ ├── __tests__ │ │ │ │ ├── serve.js │ │ │ │ └── ssr-react.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── prerender.js │ │ │ ├── server.js │ │ │ ├── src │ │ │ │ ├── App.jsx │ │ │ │ ├── add.js │ │ │ │ ├── circular-dep-init │ │ │ │ │ ├── README.md │ │ │ │ │ ├── circular-dep-init.js │ │ │ │ │ ├── module-a.js │ │ │ │ │ └── module-b.js │ │ │ │ ├── entry-client.jsx │ │ │ │ ├── entry-server.jsx │ │ │ │ ├── forked-deadlock │ │ │ │ │ ├── README.md │ │ │ │ │ ├── common-module.js │ │ │ │ │ ├── deadlock-fuse-module.js │ │ │ │ │ ├── fuse-stuck-bridge-module.js │ │ │ │ │ ├── middle-module.js │ │ │ │ │ └── stuck-module.js │ │ │ │ ├── multiply.js │ │ │ │ └── pages │ │ │ │ ├── About.jsx │ │ │ │ ├── Env.jsx │ │ │ │ └── Home.jsx │ │ │ └── vite.config.js │ │ ├── ssr-vue │ │ │ ├── __tests__ │ │ │ │ ├── serve.js │ │ │ │ └── ssr-vue.spec.ts │ │ │ ├── dep-import-type │ │ │ │ ├── deep │ │ │ │ │ └── index.d.ts │ │ │ │ └── package.json │ │ │ ├── example-external-component │ │ │ │ ├── ExampleExternalComponent.vue │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── prerender.js │ │ │ ├── server.js │ │ │ ├── src │ │ │ │ ├── App.vue │ │ │ │ ├── assets │ │ │ │ │ ├── button.css │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── Inter-Italic.woff │ │ │ │ │ │ └── Inter-Italic.woff2 │ │ │ │ │ └── logo.png │ │ │ │ ├── components │ │ │ │ │ ├── Foo.jsx │ │ │ │ │ ├── ImportType.vue │ │ │ │ │ ├── button.js │ │ │ │ │ └── foo.css │ │ │ │ ├── entry-client.js │ │ │ │ ├── entry-server.js │ │ │ │ ├── main.js │ │ │ │ ├── pages │ │ │ │ │ ├── About.vue │ │ │ │ │ ├── External.vue │ │ │ │ │ ├── Home.vue │ │ │ │ │ └── Store.vue │ │ │ │ └── router.js │ │ │ ├── vite.config.js │ │ │ └── vite.config.noexternal.js │ │ ├── ssr-webworker │ │ │ ├── __tests__ │ │ │ │ ├── serve.js │ │ │ │ └── ssr-webworker.spec.ts │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ └── entry-worker.jsx │ │ │ ├── vite.config.js │ │ │ └── worker.js │ │ ├── tailwind │ │ │ ├── __test__ │ │ │ │ └── tailwind.spec.ts │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── postcss.config.js │ │ │ ├── public │ │ │ │ └── favicon.ico │ │ │ ├── src │ │ │ │ ├── App.vue │ │ │ │ ├── assets │ │ │ │ │ └── logo.png │ │ │ │ ├── components │ │ │ │ │ └── HelloWorld.vue │ │ │ │ ├── main.js │ │ │ │ ├── router.ts │ │ │ │ └── views │ │ │ │ └── Page.vue │ │ │ ├── tailwind.config.js │ │ │ └── vite.config.ts │ │ ├── testUtils.ts │ │ ├── tsconfig-json │ │ │ ├── __tests__ │ │ │ │ └── tsconfig-json.spec.ts │ │ │ ├── index.html │ │ │ ├── nested │ │ │ │ ├── main.ts │ │ │ │ ├── not-used-type.ts │ │ │ │ └── tsconfig.json │ │ │ ├── nested-with-extends │ │ │ │ ├── main.ts │ │ │ │ ├── not-used-type.ts │ │ │ │ └── tsconfig.json │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── main.ts │ │ │ │ └── not-used-type.ts │ │ │ └── tsconfig.json │ │ ├── tsconfig-json-load-error │ │ │ ├── __tests__ │ │ │ │ └── tsconfig-json-load-error.spec.ts │ │ │ ├── has-error │ │ │ │ ├── main.ts │ │ │ │ └── tsconfig.json │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ └── main.ts │ │ │ └── tsconfig.json │ │ ├── tsconfig.json │ │ ├── vue │ │ │ ├── Assets.vue │ │ │ ├── AsyncComponent.vue │ │ │ ├── CssModules.vue │ │ │ ├── CustomBlock.vue │ │ │ ├── CustomBlockPlugin.ts │ │ │ ├── CustomElement.ce.vue │ │ │ ├── Hmr.vue │ │ │ ├── Main.vue │ │ │ ├── Node.vue │ │ │ ├── PreProcessors.vue │ │ │ ├── ReactivityTransform.vue │ │ │ ├── ScanDep.vue │ │ │ ├── Slotted.vue │ │ │ ├── Syntax.vue │ │ │ ├── __tests__ │ │ │ │ └── vue.spec.ts │ │ │ ├── assets │ │ │ │ ├── asset.png │ │ │ │ └── fragment.svg │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── public │ │ │ │ └── icon.png │ │ │ ├── setup-import-template │ │ │ │ ├── SetupImportTemplate.vue │ │ │ │ └── template.html │ │ │ ├── src-import │ │ │ │ ├── SrcImport.vue │ │ │ │ ├── script.ts │ │ │ │ ├── srcImportStyle.vue │ │ │ │ ├── srcImportStyle2.vue │ │ │ │ ├── style.css │ │ │ │ ├── style2.css │ │ │ │ └── template.html │ │ │ └── vite.config.ts │ │ ├── vue-jsx │ │ │ ├── Comp.tsx │ │ │ ├── Comps.jsx │ │ │ ├── OtherExt.tesx │ │ │ ├── Script.vue │ │ │ ├── SrcImport.jsx │ │ │ ├── SrcImport.vue │ │ │ ├── __tests__ │ │ │ │ └── vue-jsx.spec.ts │ │ │ ├── index.html │ │ │ ├── main.jsx │ │ │ ├── package.json │ │ │ └── vite.config.js │ │ ├── vue-lib │ │ │ ├── __tests__ │ │ │ │ ├── serve.js │ │ │ │ └── vue-lib.spec.ts │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src-consumer │ │ │ │ └── index.ts │ │ │ ├── src-lib │ │ │ │ ├── CompA.vue │ │ │ │ ├── CompB.vue │ │ │ │ └── index.ts │ │ │ ├── vite.config.consumer.ts │ │ │ └── vite.config.lib.ts │ │ ├── wasm │ │ │ ├── __tests__ │ │ │ │ └── wasm.spec.ts │ │ │ ├── heavy.wasm │ │ │ ├── heavy.wasm.map │ │ │ ├── index.html │ │ │ ├── light.wasm │ │ │ └── package.json │ │ └── worker │ │ ├── __tests__ │ │ │ └── worker.spec.ts │ │ ├── index.html │ │ ├── my-shared-worker.ts │ │ ├── my-worker.ts │ │ ├── newUrl │ │ │ ├── module.js │ │ │ ├── url-shared-worker.js │ │ │ └── url-worker.js │ │ ├── package.json │ │ ├── possible-ts-output-worker.mjs │ │ ├── test-plugin.tsx │ │ ├── vite.config.ts │ │ └── workerImport.js │ ├── plugin-legacy │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── plugin-react │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── api-extractor.json │ │ ├── package.json │ │ ├── src │ │ │ ├── babel.d.ts │ │ │ ├── fast-refresh.ts │ │ │ ├── index.ts │ │ │ └── jsx-runtime │ │ │ ├── babel-import-to-require.ts │ │ │ ├── babel-restore-jsx.spec.ts │ │ │ ├── babel-restore-jsx.ts │ │ │ └── restore-jsx.ts │ │ └── tsconfig.json │ ├── plugin-vue │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── api-extractor.json │ │ ├── package.json │ │ ├── src │ │ │ ├── compiler.ts │ │ │ ├── handleHotUpdate.ts │ │ │ ├── helper.ts │ │ │ ├── index.ts │ │ │ ├── main.ts │ │ │ ├── script.ts │ │ │ ├── style.ts │ │ │ ├── template.ts │ │ │ └── utils │ │ │ ├── descriptorCache.ts │ │ │ ├── error.ts │ │ │ └── query.ts │ │ └── tsconfig.json │ ├── plugin-vue-jsx │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ └── vite │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── api-extractor.json │ ├── bin │ │ ├── openChrome.applescript │ │ └── vite.js │ ├── client.d.ts │ ├── package.json │ ├── rollup.config.js │ ├── scripts │ │ └── patchTypes.ts │ ├── src │ │ ├── client │ │ │ ├── client.ts │ │ │ ├── env.ts │ │ │ ├── overlay.ts │ │ │ └── tsconfig.json │ │ └── node │ │ ├── __tests__ │ │ │ ├── asset.spec.ts │ │ │ ├── build.spec.ts │ │ │ ├── config.spec.ts │ │ │ ├── dev.spec.ts │ │ │ ├── packages │ │ │ │ ├── name │ │ │ │ │ └── package.json │ │ │ │ └── noname │ │ │ │ └── package.json │ │ │ ├── plugins │ │ │ │ ├── css.spec.ts │ │ │ │ └── import.spec.ts │ │ │ ├── scan.spec.ts │ │ │ └── utils.spec.ts │ │ ├── build.ts │ │ ├── certificate.ts │ │ ├── cli.ts │ │ ├── config.ts │ │ ├── constants.ts │ │ ├── http.ts │ │ ├── importGlob.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── optimizer │ │ │ ├── esbuildDepPlugin.ts │ │ │ ├── index.ts │ │ │ ├── registerMissing.ts │ │ │ └── scan.ts │ │ ├── packages.ts │ │ ├── plugin.ts │ │ ├── plugins │ │ │ ├── asset.ts │ │ │ ├── assetImportMetaUrl.ts │ │ │ ├── clientInjections.ts │ │ │ ├── css.ts │ │ │ ├── dataUri.ts │ │ │ ├── define.ts │ │ │ ├── esbuild.ts │ │ │ ├── html.ts │ │ │ ├── importAnalysis.ts │ │ │ ├── importAnalysisBuild.ts │ │ │ ├── index.ts │ │ │ ├── json.ts │ │ │ ├── loadFallback.ts │ │ │ ├── manifest.ts │ │ │ ├── modulePreloadPolyfill.ts │ │ │ ├── preAlias.ts │ │ │ ├── reporter.ts │ │ │ ├── resolve.ts │ │ │ ├── ssrRequireHook.ts │ │ │ ├── terser.ts │ │ │ ├── wasm.ts │ │ │ ├── worker.ts │ │ │ └── workerImportMetaUrl.ts │ │ ├── preview.ts │ │ ├── server │ │ │ ├── __tests__ │ │ │ │ ├── fixtures │ │ │ │ │ ├── lerna │ │ │ │ │ │ ├── lerna.json │ │ │ │ │ │ └── nested │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── none │ │ │ │ │ │ └── nested │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── pnpm │ │ │ │ │ │ ├── nested │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── pnpm-workspace.yaml │ │ │ │ │ └── yarn │ │ │ │ │ ├── nested │ │ │ │ │ │ └── package.json │ │ │ │ │ └── package.json │ │ │ │ ├── pluginContainer.spec.ts │ │ │ │ └── search-root.spec.ts │ │ │ ├── hmr.ts │ │ │ ├── index.ts │ │ │ ├── middlewares │ │ │ │ ├── base.ts │ │ │ │ ├── error.ts │ │ │ │ ├── indexHtml.ts │ │ │ │ ├── proxy.ts │ │ │ │ ├── spaFallback.ts │ │ │ │ ├── static.ts │ │ │ │ ├── time.ts │ │ │ │ └── transform.ts │ │ │ ├── moduleGraph.ts │ │ │ ├── openBrowser.ts │ │ │ ├── pluginContainer.ts │ │ │ ├── searchRoot.ts │ │ │ ├── send.ts │ │ │ ├── sourcemap.ts │ │ │ ├── transformRequest.ts │ │ │ └── ws.ts │ │ ├── ssr │ │ │ ├── __tests__ │ │ │ │ └── ssrTransform.spec.ts │ │ │ ├── ssrExternal.ts │ │ │ ├── ssrManifestPlugin.ts │ │ │ ├── ssrModuleLoader.ts │ │ │ ├── ssrStacktrace.ts │ │ │ └── ssrTransform.ts │ │ ├── tsconfig.json │ │ └── utils.ts │ ├── tsconfig.base.json │ └── types │ ├── alias.d.ts │ ├── anymatch.d.ts │ ├── chokidar.d.ts │ ├── commonjs.d.ts │ ├── connect.d.ts │ ├── customEvent.d.ts │ ├── dynamicImportVars.d.ts │ ├── hmrPayload.d.ts │ ├── http-proxy.d.ts │ ├── importMeta.d.ts │ ├── package.json │ ├── shims.d.ts │ ├── terser.d.ts │ └── ws.d.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts │ ├── jestEnv.cjs │ ├── jestGlobalSetup.cjs │ ├── jestGlobalTeardown.cjs │ ├── jestPerTestSetup.ts │ ├── patchEsbuildDist.ts │ ├── patchFileDeps.ts │ ├── publishCI.ts │ ├── release.ts │ ├── releaseUtils.ts │ ├── tsconfig.json │ └── verifyCommit.ts └── tree.txt 298 directories, 969 files
- 298 directories, 969 files
packages/playground
配下が大きい- 215 directories, 628 files を占める
- 様々な環境でViteを利用するミニマムセットで、全てテストを含んでいる
playground
でgrepしてみると、 CONTRIBUTING.md がヒットし、テストに関する記述などが出てくる- jestの設定に含まれており、
playwright-chromium
経由で Playwright を起動してブラウザ上でテストが実行される
packages/vite
がvite本体ぽい- 27 directories, 114 files
- コア部分は意外と小さい
ディレクトリだけ一覧して眺める
ファイル一覧だと Playground 配下が巨大すぎてアレなので、ディレクトリだけで一覧してみる。
tree -d
playground
node_modules
は除去
という感じで出力してみた。
. ├── docs │ ├── blog │ ├── config │ ├── guide │ ├── images │ ├── plugins │ └── public ├── packages │ ├── create-vite │ │ ├── __tests__ │ │ ├── template-lit │ │ │ └── src │ │ ├── template-lit-ts │ │ │ └── src │ │ ├── template-preact │ │ │ └── src │ │ ├── template-preact-ts │ │ │ └── src │ │ ├── template-react │ │ │ └── src │ │ ├── template-react-ts │ │ │ └── src │ │ ├── template-svelte │ │ │ ├── public │ │ │ └── src │ │ │ ├── assets │ │ │ └── lib │ │ ├── template-svelte-ts │ │ │ ├── public │ │ │ └── src │ │ │ ├── assets │ │ │ └── lib │ │ ├── template-vanilla │ │ ├── template-vanilla-ts │ │ │ └── src │ │ ├── template-vue │ │ │ ├── public │ │ │ └── src │ │ │ ├── assets │ │ │ └── components │ │ └── template-vue-ts │ │ ├── public │ │ └── src │ │ ├── assets │ │ └── components │ ├── playground │ │ └── (※省略) │ ├── plugin-legacy │ ├── plugin-react │ │ ├── dist │ │ └── src │ │ └── jsx-runtime │ ├── plugin-vue │ │ ├── dist │ │ └── src │ │ └── utils │ ├── plugin-vue-jsx │ └── vite │ ├── bin │ ├── dist │ │ ├── client │ │ └── node │ │ └── chunks │ ├── scripts │ ├── src │ │ ├── client │ │ └── node │ │ ├── __tests__ │ │ │ ├── packages │ │ │ │ ├── name │ │ │ │ └── noname │ │ │ └── plugins │ │ ├── optimizer │ │ ├── plugins │ │ ├── server │ │ │ ├── __tests__ │ │ │ │ └── fixtures │ │ │ │ ├── lerna │ │ │ │ │ └── nested │ │ │ │ ├── none │ │ │ │ │ └── nested │ │ │ │ ├── pnpm │ │ │ │ │ └── nested │ │ │ │ └── yarn │ │ │ │ └── nested │ │ │ └── middlewares │ │ └── ssr │ │ └── __tests__ │ └── types └── scripts
- そこまで階層が深いわけでもなく、わりとシンプルなディレクトリ構造な印象
create-vite
vite
の2つがコアって感じ
テストを動かしてみる
pnpm i pnpm test
- 普通に大量に落ちる。なんでや!
Target page, context or browser has been closed
- https://github.com/vitejs/vite/issues/4543 1回ビルドしないとダメぽい
pnpm build
実行 → まだ落ちる
Since Jest will attempt to run tests in parallel, if your machine has many cores this may cause flaky test failures with multiple Playwright instances running at the same time. You can force the tests to run in series with
pnpm run test-serve -- --runInBand
.
- らしいので、
pnpm run test-serve -- --runInBand
を試したところパスした
とりあえずディレクトリを眺めてテストを通すところまでやった。
最初に全ファイル出力したときは「おおぅ...」となったが、playground系のコードを省いたらわりとなんとかなる気がしてきた。
次→ルートにある各種ファイルを見てみる