Moment: Tambahkan dukungan untuk bundler yang mendukung ESM

Dibuat pada 12 Nov 2019  ·  3Komentar  ·  Sumber: moment/moment

Halo!

Terima kasih untuk perpustakaan yang luar biasa ini!

Namun, saya percaya bahwa bidang "module" dalam manifes paket ( file package.json ) harus mengarah ke bundel ESM, misalnya ./src/moment.js .

Bundler yang mendukung ESM (Webpack, Rollup, dan lainnya) harus dapat menemukan bundel ESM menggunakan kolom module untuk menggunakan teknik pengoptimalan modern (seperti goyangan pohon). Saat ini, bundel UMD ./moment.js digunakan sebagai gantinya.

Ini menyebabkan seluruh pustaka dimuat dalam proyek yang mendukung ESM, bahkan jika Anda mengimpor satu simbol darinya.

Misalnya, impor seperti ini:

import { isMoment } from 'moment';

akan mengimpor semuanya dari perpustakaan, namun, hanya satu fungsi yang diminta.

Dan Anda tidak dapat menggunakan import { isMoment } from 'moment/src/moment'; sebagai solusi dalam proyek TypeScript karena akan merusak pengetikan.

BuilRelease Help Wanted

Komentar yang paling membantu

Setelah melihat konten ./src/moment.js saya menarik kembali kata-kata saya. Konten tidak masuk akal dari sudut pandang ESM. Alih-alih mengimpor dan mengekspor ulang simbol yang berguna seperti Moment , isMoment , dll, itu membangun sebuah objek dan mengekspornya. Saya yakin ini adalah entry point untuk bundel UMD bukan?

Agar alat modern berfungsi, kita memerlukan bundel ESM yang tepat, yang akan mengekspor semua simbol yang berguna satu per satu.

Saya telah berhasil mengimpor simbol yang saya butuhkan (tanpa memuat seluruh bundel moment.js) dengan cara ini:

// @ts-ignore
import { isMoment, Moment } from 'moment/src/lib/moment/constructor';

Tetapi saya harus menekan kesalahan pengetikan dengan @ts-ignore , yang memungkinkan impor, tetapi merusak semua pengetikan untuk simbol yang diimpor. Juga, jalurnya jelek dan tidak boleh digunakan oleh pengguna akhir (karena merusak enkapsulasi).


Saya baru saja melakukan percobaan. Saya telah membuat file bernama moment.esm.js di root paket dengan konten berikut:

export { isMoment, Moment } from './src/lib/moment/constructor';

Dan menambahkan bidang module untuk mengarahkannya dari manifes paket.

Kemudian saya mengimpornya di aplikasi saya:

import { isMoment, Moment } from 'moment';

Itu diimpor dengan benar dengan deklarasi pengetikan bekerja seperti yang diharapkan dan juga bekerja dengan benar selama pembuatan Webpack dan Rollup. Hanya simbol tertentu yang diimpor tanpa memuat seluruh paket dengan semua lokal.

Saya yakin ini adalah cara yang harus dilakukan dan dapat diperluas untuk mengekspor simbol lain, yang dijelaskan dalam deklarasi.

Semua 3 komentar

Setelah melihat konten ./src/moment.js saya menarik kembali kata-kata saya. Konten tidak masuk akal dari sudut pandang ESM. Alih-alih mengimpor dan mengekspor ulang simbol yang berguna seperti Moment , isMoment , dll, itu membangun sebuah objek dan mengekspornya. Saya yakin ini adalah entry point untuk bundel UMD bukan?

Agar alat modern berfungsi, kita memerlukan bundel ESM yang tepat, yang akan mengekspor semua simbol yang berguna satu per satu.

Saya telah berhasil mengimpor simbol yang saya butuhkan (tanpa memuat seluruh bundel moment.js) dengan cara ini:

// @ts-ignore
import { isMoment, Moment } from 'moment/src/lib/moment/constructor';

Tetapi saya harus menekan kesalahan pengetikan dengan @ts-ignore , yang memungkinkan impor, tetapi merusak semua pengetikan untuk simbol yang diimpor. Juga, jalurnya jelek dan tidak boleh digunakan oleh pengguna akhir (karena merusak enkapsulasi).


Saya baru saja melakukan percobaan. Saya telah membuat file bernama moment.esm.js di root paket dengan konten berikut:

export { isMoment, Moment } from './src/lib/moment/constructor';

Dan menambahkan bidang module untuk mengarahkannya dari manifes paket.

Kemudian saya mengimpornya di aplikasi saya:

import { isMoment, Moment } from 'moment';

Itu diimpor dengan benar dengan deklarasi pengetikan bekerja seperti yang diharapkan dan juga bekerja dengan benar selama pembuatan Webpack dan Rollup. Hanya simbol tertentu yang diimpor tanpa memuat seluruh paket dengan semua lokal.

Saya yakin ini adalah cara yang harus dilakukan dan dapat diperluas untuk mengekspor simbol lain, yang dijelaskan dalam deklarasi.

Saya mendukung ini.

Lihat https://momentjs.com/docs/#/ -project-status /

Apakah halaman ini membantu?
0 / 5 - 0 peringkat