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

es module #10

Closed
MasatoMakino opened this issue Aug 15, 2021 · 3 comments · Fixed by #21
Closed

es module #10

MasatoMakino opened this issue Aug 15, 2021 · 3 comments · Fixed by #21
Assignees
Labels
enhancement New feature or request

Comments

@MasatoMakino
Copy link
Owner

MasatoMakino commented Aug 15, 2021

目標

このモジュールを、ESM対応にする。

背景

node.js v12以降、es modules(以下ESM)が標準サポートとなった。

手法

CJSとESMのそれぞれのバイナリをTypeScriptソースから出力する。
package.jsonにそれぞれのエントリーポイントを記述し、モジュール利用者が自由に選択可能とする。

関連ブランチ

https://github.com/MasatoMakino/gulptask-ejs/tree/dual-package

問題点

現状で解決できていない問題点を挙げる。これらの問題が解決したら、開発ブランチをmainブランチにマージする。

importの拡張子

import構文では、ファイル拡張子が必須となる。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import

TypeScriptのimport構文では拡張子が省略されるため、整合性がとれない。
配布用のバイナリーはrollup.jsを利用し巻き上げる。

dynamic import

CJSからESMを呼び出す場合、dynamic importが推奨されている。
https://nodejs.org/api/esm.html#esm_import_expressions
globby v12.0.0のようにESMしか提供しないモジュールをCJSから呼び出すには、dynamic importを利用するしかない。

しかし、現状のTypeScriptでは、dynamic importをrequireに変換してしまう。
microsoft/TypeScript#43329

この問題は将来のTypeScriptで解決される予定。

@MasatoMakino MasatoMakino added the enhancement New feature or request label Aug 15, 2021
@MasatoMakino MasatoMakino self-assigned this Aug 15, 2021
@MasatoMakino
Copy link
Owner Author

https://devblogs.microsoft.com/typescript/announcing-typescript-4-7-beta/
TypeScript 4.7でモジュールタイプ"nodenext"が追加される予定

@MasatoMakino
Copy link
Owner Author

CLIを追加したため、ESMへの移行メリットが減少した。
外部から呼び出すのではなく、npmスクリプト内で完結するため。

@MasatoMakino
Copy link
Owner Author

Pure ESMモジュールに変更する。
呼び出しは原則CLIとする。

@MasatoMakino MasatoMakino changed the title add support dual packages es module Sep 4, 2023
@MasatoMakino MasatoMakino linked a pull request Oct 14, 2023 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant