こんにちは!
この素晴らしい図書館をありがとう!
ただし、パッケージマニフェスト( package.json
ファイル)の"module"
フィールドは、ESMバンドル( ./src/moment.js
)を指している必要があると思います。
ESM (Webpack、Rollup など) をサポートするバンドラーは、最新の最適化手法 (ツリー シェイクなど) を使用するために、 module
フィールドを使用して ESM バンドルを見つけられる必要があります。 現在、代わりに./moment.js
UMDバンドルが使用されています。
これにより、ライブラリから単一のシンボルをインポートした場合でも、ライブラリ全体がESM対応プロジェクトにロードされます。
たとえば、次のようなインポート:
import { isMoment } from 'moment';
ライブラリからすべてをインポートしますが、要求された関数は1つだけです。
また、 import { isMoment } from 'moment/src/moment';
をTypeScriptプロジェクトの回避策として使用することはできません。これは、入力が失敗するためです。
./src/moment.js
の内容を見た後、私は自分の言葉を取り戻しています。 このコンテンツは、ESMの観点からは意味がありません。 Moment
、 isMoment
などの便利なシンボルをインポートおよび再エクスポートする代わりに、オブジェクトを作成してエクスポートします。 UMD バンドルのエントリ ポイントだと思いませんか?
最新のツールが機能するためには、適切なESMバンドルが必要です。これにより、すべての有用なシンボルが個別にエクスポートされます。
私はこの方法で(moment.jsのバンドル全体をロードせずに)必要なシンボルをインポートすることができました:
// @ts-ignore
import { isMoment, Moment } from 'moment/src/lib/moment/constructor';
しかし、 @ts-ignore
を使用して入力エラーを抑制しなければなりません
さっき実験してみました。 パッケージのルートにmoment.esm.js
というファイルを作成しました。内容は次のとおりです。
export { isMoment, Moment } from './src/lib/moment/constructor';
そして、パッケージ マニフェストからそれを指すmodule
フィールドを追加しました。
次に、それをアプリケーションにインポートしました。
import { isMoment, Moment } from 'moment';
正常にインポートされ、型宣言が期待どおりに機能し、Webpack および Rollup ビルド中にも正しく機能しました。 バンドル全体をすべてのロケールでロードせずに、指定されたシンボルのみがインポートされました。
私はこれが進むべき道であり、宣言で説明されている他のシンボルをエクスポートするように拡張できると信じています。
私はこれを支持します。
https://momentjs.com/docs/#/ -project-status/ を参照して
最も参考になるコメント
./src/moment.js
の内容を見た後、私は自分の言葉を取り戻しています。 このコンテンツは、ESMの観点からは意味がありません。Moment
、isMoment
などの便利なシンボルをインポートおよび再エクスポートする代わりに、オブジェクトを作成してエクスポートします。 UMD バンドルのエントリ ポイントだと思いませんか?最新のツールが機能するためには、適切なESMバンドルが必要です。これにより、すべての有用なシンボルが個別にエクスポートされます。
私はこの方法で(moment.jsのバンドル全体をロードせずに)必要なシンボルをインポートすることができました:
しかし、
@ts-ignore
を使用して入力エラーを抑制しなければなりませんさっき実験してみました。 パッケージのルートに
moment.esm.js
というファイルを作成しました。内容は次のとおりです。そして、パッケージ マニフェストからそれを指す
module
フィールドを追加しました。次に、それをアプリケーションにインポートしました。
正常にインポートされ、型宣言が期待どおりに機能し、Webpack および Rollup ビルド中にも正しく機能しました。 バンドル全体をすべてのロケールでロードせずに、指定されたシンボルのみがインポートされました。
私はこれが進むべき道であり、宣言で説明されている他のシンボルをエクスポートするように拡張できると信じています。