使用 Moment JS 创建 React-App:找不到模块“./locale”

Create-React-App with Moment JS: Cannot find module "./locale"

只是 运行 我的 Web 应用程序上的一个 npm update 现在 Moment JS 似乎失败并显示以下消息:

Error: Cannot find module "./locale"
\node_modules\moment\src\lib\moment\prototype.js:1
> 1 | import { Moment } from './constructor';

不确定我在更新之前使用的 Moment JS 是哪个版本,但我的应用程序已经运行了几个月。

我创建了另一个 React 应用程序和 运行 一个 npm install moment --save 并修改了源代码以显示时间,但最终出现了与上述相同的错误。

不确定是否存在使用 Create-React-App 集成 Moment JS 的防故障方法,目前还没有弹出到自己管理 webpack 设置,但我真的不想这样做。还有其他人看到这些问题或取得成功吗?如果是这样,简短的记录将有助于提供帮助。

这似乎已被确定为 Moment JS 2.19 版的问题。如果您已经升级到 2.19 运行 npm install moment@2.18.1 恢复到以前的版本,直到它被修复!

查看主题:https://github.com/moment/moment/issues/4216

上面的答案,虽然我确信对某些人有用,但对我不起作用。我找到的解决方案相当快速和简单,但比简单的降级要复杂一些。

这个问题是由 webpack 引起的,可以通过 webpack 解决。因此,我们必须向 webpack.config.js 文件中添加几行代码。如果你还没有,可以在webpack根目录添加一个:

YOURAPPNAME/node-modules/webpack/

现在您已进入 webpack.config.js 文件,您需要添加几行代码。只需将其复制并粘贴到新文件中或将其改编为您在 webpack.config.js.

中已有的代码
module.exports = {
    resolve: {
        alias: {
            moment$: 'moment/moment.js'
        }
    }
};

您在 index.js(或其他命名)文件中的导入语句应如下所示:

import moment from 'moment'

您现在应该可以完全正常地使用moment了。例如:

var tomorrow = moment().add(1, "day")

使用 Create React App 和 Moment 2.24.0 构建的应用程序,以下似乎运行良好:

import moment from 'moment';
import 'moment/min/locales';

而不是直接导入 moment-with-locales。或者,也可以只导入所需的语言环境:

import moment from 'moment';
import 'moment/locale/fr';
import 'moment/locale/ru';

如果您是全新安装或将 moment 升级到 2.25 并且现在收到此警告,请尝试强制所有软件包使用 2.24。

更新:New release 2.25.3 已报告修复此问题!尝试先更新一下。

如果您依赖某些尚未升级的库,请告诉他们升级。同时,如果你需要 2.25,你也可以强制你的子依赖使用这个版本。

如果您使用 yarn,请将这些行添加到 package.json

    "resolutions": {
        "**/moment": ">=2.25.3"
    },

这将添加到顶层的 packages.json 中,即与 "dependencies".

相同的缩进