Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

エイリアスがパラメータ付きimportで機能しない問題を解決 #48

Closed
qrac opened this issue Jun 7, 2022 · 6 comments
Closed

Comments

@qrac
Copy link
Owner

qrac commented Jun 7, 2022

import AppHeader from "~/components/app-header?ph"
✘ [ERROR] Could not resolve "/Users/user/github/demo/src/components/~/components/app-header"

    node_modules/.minista/partial-hydration/string-index.mjs:4:17:
      4 │ import PH_3 from "/Users/user/github/demo/src/components/~/components/app-header"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

エイリアスと ?ph を組み合わせると機能しない。esbuildで ?ph されているモジュールを取得するときにエイリアスの処理が考慮されていないから。path.isAbsolute(args.path) する前になんとかしてエイリアスを適応させないといけない。

@qrac
Copy link
Owner Author

qrac commented Jun 7, 2022

onResolveのいずれかが返れば、それ以上リゾルバが呼ばれることはないらしい。

リゾルバが別途設定されているPartial HydrationおよびRaw Loader・CssModulePluginの処理が行われるファイルにエイリアスが適応されないことになる。(MDX内のimportがどうなっているかはわからない)

リゾルバのプラグインを1つにまとめるか、エイリアスの処理を各プラグインに埋め込まなくてはならない。

@qrac qrac changed the title Partial Hydrationのimportでエイリアスが機能しない問題を解決 エイリアスがonResolve処理の伴うimportで機能しない問題を解決 Jun 7, 2022
@qrac
Copy link
Owner Author

qrac commented Jun 7, 2022

検証を進めたところ、本番ビルド(esbuild)へのエイリアスは jsconfig.json または tsconfig.jsonpaths が適応されていた。

そして逆に前回 (#47) の修正で入れたプラグインが動いていないことが分かった。そもそも上記 paths が適応された場合はfilterにヒットしなくなる。

ただ、jsconfig.json または tsconfig.jsonpaths はPartial Hydrationなどのパスにはなぜか適応されていない。別途処理が必要。

@qrac
Copy link
Owner Author

qrac commented Jun 7, 2022

jsconfig.jsontsconfig.json の設定のみにした場合はViteの開発サーバーがコケるので、Vite側に resolve.alias を渡す必要はある。

[plugin:vite:import-analysis] Failed to resolve import "~/components/app-header" from "src/components/app-layout.tsx". Does the file exist?

@qrac
Copy link
Owner Author

qrac commented Jun 7, 2022

エイリアスを置換した際に拡張子がないと読み込めない。以下のように .tsx がついていると読み込める。

"/Users/user/github/demo/src/components/app-header.tsx"

@qrac
Copy link
Owner Author

qrac commented Jun 7, 2022

エイリアスのプラグインは動いたが、やはりリゾルバが1回返されていると他のプラグインが適応されない。なのでaliasプラグインは削除し、jsconfig.jsontsconfig.json の設定が必須。その上で他のプラグインのパス解決を挿入する。

@qrac qrac changed the title エイリアスがonResolve処理の伴うimportで機能しない問題を解決 エイリアスがパラメータ付きimportで機能しない問題を解決 Jun 7, 2022
@qrac
Copy link
Owner Author

qrac commented Jun 7, 2022

v2.6.2にて修正。

@qrac qrac closed this as completed Jun 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant