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

时间:2017-10-10 17:33:53

标签: javascript node.js locale momentjs create-react-app

刚刚在我的网络应用程序上运行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 的版本,但我的应用程序已经工作了几个月。

我创建了另一个反应应用并运行了npm install moment --save并修改了源以显示时间并最终得到了上述相同的错误。

不确定是否存在使用创建-React-App 集成 Moment JS 的防故障方式,目前缺少弹出来自行管理webpack设置,但是我真的不想这样做。其他人看到这些问题或取得成功?如果是这样的话,那么简短的写作就会有助于帮助。

4 个答案:

答案 0 :(得分:5)

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

见线程:https://github.com/moment/moment/issues/4216

答案 1 :(得分:2)

尽管我毫无疑问对某些人有用,但上面的答案对我不起作用。我发现的解决方案相当快捷,简便,但是比简单的降级要复杂一些。

此问题是由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'

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

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

答案 2 :(得分:2)

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

更新:据报告New release 2.25.3可以解决此问题!尝试先进行更新。

如果您依赖尚未升级的某些库,请告诉他们进行升级。同时,如果需要2.25,则还可以强制子依赖项使用此版本。

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

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

这将被添加到package.json的顶层,即与“ dependencies”相同的缩进。

答案 3 :(得分:1)

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