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';

将从库中导入所有内容,但是,只请求了一个函数。

而且您不能在TypeScript项目中使用import { isMoment } from 'moment/src/moment';作为解决方法,因为它将破坏输入。

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和汇总构建期间也可以正常工作。 仅导入指定的符号,而不会加载包含所有语言环境的整个捆绑软件。

我相信这是一种方法,可以扩展以导出声明中描述的其他符号。

所有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和汇总构建期间也可以正常工作。 仅导入指定的符号,而不会加载包含所有语言环境的整个捆绑软件。

我相信这是一种方法,可以扩展以导出声明中描述的其他符号。

我支持这个。

参见https://momentjs.com/docs/#/ -project-status /

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

theazureshadow picture theazureshadow  ·  44评论

fernandoacorreia picture fernandoacorreia  ·  31评论

dushkostanoeski picture dushkostanoeski  ·  23评论

FGRibreau picture FGRibreau  ·  112评论

elmart picture elmart  ·  42评论