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

「TypeScript で"moduleResolution": "Node"は使わないほうがいい」でのmainフィールドに関しての説明について #1

Closed
sapphi-red opened this issue Apr 21, 2023 · 2 comments

Comments

@sapphi-red
Copy link

初めまして、https://blog.s2n.tech/articles/dont-use-moduleresolution-node という記事を読みました。
とてもわかりやすかったです! 👍

一点記事の中で不正確だと思われる記述がありましたので、ここで報告いたしします。

一つ注意したいのが、このフィールドは CommonJS でのみ使用され、ES Modules では使用されません。

と書かれていますが、ESMでもmainフィールドは基本使用されます。
これはNode.jsのESMでのモジュール解決の仕様PACKAGE_RESOLVEの11.内の6.が該当箇所です。

実際にその挙動は下の手順で確かめることができます。

  1. https://github.com/sapphi-red-repros/esm-main-field-resolve をクローンする
  2. pkg ディレクトリを開く
  3. npm i を実行
  4. node index.js を実行

補足:

ESMでもmainフィールドは使用されますが、正確にはパッケージのトップレベルにあるpackage.jsonのもののみ使用されます。(CJSではパッケージのトップレベルでないpackage.jsonも使用される)
これはCJSのモジュール解決の仕様でのLOAD_AS_DIRECTORY内で、パッケージ直下かどうかにかかわらずpackage.jsonのmainフィールドを利用する処理があることからわかります。
こちらのほうはかなり細かい話なので記事では触れなくても問題ないと思います。

@shun-shobon
Copy link
Owner

@sapphi-red
大変丁寧なご指摘ありがとうございます!
自分の方でも確認したところ,再現できたため 52e36b3 にて修正しました!ご確認いただけると幸いです。

@sapphi-red
Copy link
Author

確認いたしました。問題ないと思います!

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

2 participants