使用 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
恢复到以前的版本,直到它被修复!
上面的答案,虽然我确信对某些人有用,但对我不起作用。我找到的解决方案相当快速和简单,但比简单的降级要复杂一些。
这个问题是由 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".
相同的缩进
只是 运行 我的 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
恢复到以前的版本,直到它被修复!
上面的答案,虽然我确信对某些人有用,但对我不起作用。我找到的解决方案相当快速和简单,但比简单的降级要复杂一些。
这个问题是由 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".
相同的缩进