Moment: ESM 対応バンドラーのサポートを追加

作成日 2019年11月12日  ·  3コメント  ·  ソース: moment/moment

こんにちは!

この素晴らしい図書館をありがとう!

ただし、パッケージマニフェスト( 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プロジェクトの回避策として使用することはできません。これは、入力が失敗するためです。

BuilRelease Help Wanted

最も参考になるコメント

./src/moment.jsの内容を見た後、私は自分の言葉を取り戻しています。 このコンテンツは、ESMの観点からは意味がありません。 MomentisMomentなどの便利なシンボルをインポートおよび再エクスポートする代わりに、オブジェクトを作成してエクスポートします。 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 ビルド中にも正しく機能しました。 バンドル全体をすべてのロケールでロードせずに、指定されたシンボルのみがインポートされました。

私はこれが進むべき道であり、宣言で説明されている他のシンボルをエクスポートするように拡張できると信じています。

全てのコメント3件

./src/moment.jsの内容を見た後、私は自分の言葉を取り戻しています。 このコンテンツは、ESMの観点からは意味がありません。 MomentisMomentなどの便利なシンボルをインポートおよび再エクスポートする代わりに、オブジェクトを作成してエクスポートします。 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/ を参照して

このページは役に立ちましたか?
0 / 5 - 0 評価