Moment: Webpack 错误:更新到 2.19.0 后找不到模块“./locale”

创建于 2017-10-10  ·  149评论  ·  资料来源: moment/moment

编辑:如果您将依赖项设置为 2.18.1,一切都会好起来的。
编辑 2:在 package.json 中设置"moment": "2.18.1"
编辑 3:我们相信这是固定的。

你好。
使用创建反应应用程序。 将 moment 更新为 2.19.0 后,我在加载时出现此错误:

错误:找不到模块“./locale”
-> 9 个堆栈框架已折叠。
./src/utils/Utils.js
src/utils/Utils.js:1

1 | 从“时刻”导入时刻

最有用的评论

@patricksteenks :是的。 在你的 package.json 中像这样修复"moment": "2.18.1"

所有149条评论

我有同样的,确认这个错误。

同样在这里

可以确认:

This relative module was not found:

* ./locale in ./node_modules/moment/src/lib/locale/locales.js

好的,我们会研究一下,但不会很快。

我们更改了 require 函数的名称,如果有人可以查看/调查它是否链接到:

https://github.com/moment/moment/pull/4213
https://github.com/moment/moment/pull/4214

同样的问题在这里。 降级能解决问题吗?

同样在这里,打破了我工作的多个应用程序。

@patricksteenks :是的。 在你的 package.json 中像这样修复"moment": "2.18.1"

@ichernev嘿,但我正在使用语言环境而不导入。 只需使用import moment from 'moment'并像这样使用moment(date).locale('uk').format('ddd') 。 据我了解,您将 import 更改为locale 。 在我的情况下,我该如何解决这个问题?

Angular-CLI 构建项目的相同问题

确认的。

VueJS 2 Webpack 构建也受到影响。 临时修复是 GautierT 建议的(降级 momentjs)

package.json (2.19 时刻时区问题)

    "moment": "2.18.1",
    "moment-timezone": "^0.5.13",

package.json (一般问题)

    "moment": "2.18.1"

我可以确认这也在发生!

我可以确认。
包.json

"moment": "2.18.1"

@renedx就这一行就够了

在 Angular 4 应用程序中也是如此。
刚刚降级到 2.18.1(package.json 中的严格版本号)

也被这个击中了。 我怀疑是 webpack 做了一些魔术来识别动态“require”,并且无法再以新名称识别它,因此语言环境永远不会被捆绑到包中。

(顺便说一句,这整个情况听起来很像 ES6 动态导入的用途。我们可以做梦:-)

我从这个页面在 webpack 中使用

new IgnorePlugin(/^\.\/locale$/, /moment$/)

现在删除它

并在需要

const moment = require('moment');

现在

const moment = require('moment').default;

严格来说,我认为Angular的连接很简单,因为大部分Angular项目使用的是Angular-CLI,而Angular-CLI内部使用的是Webpack。 但它可能与该堆栈中的某些特定 Webpack 配置有关。
不过,这似乎是一个相当普遍的捆绑问题。

忏悔吧,忏悔吧,末日来了!

同样在这里。

import moment from "moment"
import "moment/locale/fr"
moment.locale("fr")
WARNING in ./node_modules/moment/src/lib/locale/locales.js
Module not found: Error: Can't resolve './locale' in '/Users/kud/Projects/_contexte/lois-webapp/node_modules/moment/src/lib/locale'
 @ ./node_modules/moment/src/lib/locale/locales.js 65:16-60
 @ ./node_modules/moment/src/lib/locale/locale.js
 @ ./node_modules/moment/src/moment.js
 @ ./src/index.js

在这里也是一样 - 我用纱线功能修复了它以重载包的默认设置:

将它放在您的主 package.json 中(如果您不直接加载 moment,则将“moment-timezone”调整为加载 moment 的包的名称):

  "resolutions": {
    "moment-timezone/moment": "2.18.1"
  },

就像一颗 10 公里长的小行星……这里也一样……

MCVE: https :

修复的预计到达时间是多少?

好的,这是我们所在的位置:

  • 如果您将依赖项设置为 2.18.1,一切都会好起来的。
  • 这是https://github.com/moment/moment/pull/4213的问题
  • 我已经与 webpack 和 react native 团队进行了接触,讨论哪些修复对所有各方都有效
  • 由于将依赖项设置为 2.18.1 提供了一种简单的缓解措施,因此我目前不想回滚。 相反,我想从的WebPack反馈等待和应对本土,看看我们是否可以来该怎么办,这将推动这一状况的协议。 出于这个原因,我没有修复的预计到达时间。
  • 可以在此处找到 MCVE: https :

运行使用 create-react-app CLI 创建的 react 应用程序时确认错误。

解决了这个降级时刻和 monent-timezone 版本。

npm install [email protected]作为临时修复,因此您不必多次更新package.json 。 这可能会很快得到解决,然后你可以做npm i

@aheissenberger这救了我的命,我在 rc-calendar 上遇到了同样的问题,可以确认它适用于 yarn 1.2.0。

同样的问题 webpack 3.6.0 + moment 2.19.0。 与 2.18.1 配合良好

其他人可能有同样的问题:尽管我没有更新到 2.19.0,但在我的 package.json 中我有^2.18.1 。 我把它改成2.18.1没有^ ,现在它不会安装任何高于 2.18.1 的东西,直到我们知道 2.19.x 是安全的

@ichernev似乎很可能是“require”的重命名导致了这些广泛的破坏。 我怀疑当您需要使用类似引用的模块时,这意味着 webpack 无法检测到导入,因为它使用 AST 静态分析来确定依赖项。

也许您可以提供它正在修复的 React Native 问题的一些详细信息,因为可能有一些更好的方法可以解决该原始问题?

在我们的项目中,我们使用yarn 1.0.2create-react-apppackage.json这些 deps

"dependencies": {
    "@types/history": "^4.5.0",
    "@types/jest": "^20.0.6",
    "@types/material-ui": "^0.18.2",
    "@types/moment-timezone": "^0.5.0",
    "@types/node": "^8.0.20",
    "@types/react": "^16.0.10",
    "@types/react-big-calendar": "^0.14.0",
    "@types/react-dnd": "^2.0.33",
    "@types/react-dnd-html5-backend": "^2.1.8",
    "@types/react-dom": "^16.0.1",
    "@types/react-modal": "^1.6.6",
    "@types/react-redux": "^4.4.40",
    "@types/react-router-dom": "^4.0.4",
    "@types/react-router-redux": "^5.0.0",
    "@types/redux": "^3.6.0",
    "@types/redux-logger": "^3.0.0",
    "@types/redux-promise-middleware": "^0.0.6",
    "@types/validator": "6.3.0",
    "lodash": "^4.17.4",
    "material-ui": "0.19.2",
    "material-ui-datatables": "^0.18.2",
    "material-ui-fullscreen-dialog": "0.7.1",
    "moment": "2.18.1",
    "moment-timezone": "^0.5.13",
    "react": "^15.6.1",
    "react-barcode": "^1.2.0",
    "react-big-calendar": "^0.15.0",
    "react-bootstrap": "^0.31.0",
    "react-bootstrap-table": "^3.4.2",
    "react-bootstrap-time-picker": "^1.0.3",
    "react-dnd": "^2.4.0",
    "react-dnd-html5-backend": "^2.4.1",
    "react-dock": "^0.2.4",
    "react-dom": "^15.5.4",
    "react-modal": "^1.7.7",
    "react-pdf-js": "^2.0.5",
    "react-phone-number-input": "^0.12.10",
    "react-print": "^1.3.1",
    "react-redux": "5.0.6",
    "react-router-dom": "^4.1.1",
    "react-router-redux": "next",
    "react-tap-event-plugin": "^2.0.1",
    "react-transition-group": "^1.1.1",
    "redux": "3.7.2",
    "redux-logger": "^3.0.1",
    "redux-persist": "^4.8.0",
    "redux-promise-middleware": "4.2.1",
    "reselect": "^3.0.1",
    "validator": "8.2.0",
    "zxcvbn": "^4.4.2"
 }

尽管我们使用"moment": "2.18.1" ,我们仍然得到
screen shot 2017-10-10 at 3 53 43 pm

是否有解决纱线问题的方法?

@ggsjyoon :我遇到了类似的情况(仍然出现错误),直到我想起您需要更新 WebPack 正在监视的文件之一才能使其重新生成并取消任何缓存版本。

+1

@ggsjyoon你的一个包可能有额外的要求(例如时刻时区) - 你可以使用我的提示https://github.com/moment/moment/issues/4216#issuecomment -335489518 用纱线解决这个问题

我最终通过改变来解决这个问题:

import * as moment from 'moment';

到:

import * as moment from 'moment/moment';

+1

@morrisonbrett这有效。 谢谢

确认@GautierT的建议对我

@maggiepint看到什么对@morrisonbrett 有用,我认为 #4213 可能不是问题。 2.19 引入了另一个新变化, package.json 中的 module 字段 - 即之前的 webpack 使用的是转译版本。

为 React Native 启用 ES6 是导致大多数问题阻塞 #4187 的原因,#3904(仅在开发分支上有一段时间)对所有 webpack 用户进行了相同的更改。

@tqc - 可能两者都有。 @thelarkinn已经确认 webpack 不喜欢动态需求。

同样的问题,有更新吗?

@maggiepint是的,在我写完那条评论后,我意识到线程末尾的错误与开始时的并不完全相同。 ES6 方面的事情可能可以用module.exports = require(‘moment’).default类的东西来修复,但我不确定这是否仍然允许摇树,并且节点和谐不喜欢将 import 与 require 混合。

通过 webpack 别名解决:

  resolve: {
    alias: {
      'moment$': 'moment/moment',
    },
  },

有人能找出 2.19 中破坏 webpack 的所有部分,提出一个最小的 PR(基于 2.19.0),恢复“坏”部分,我们将考虑将其合并到 2.19.1。

说“我也是”1000 次并没有带来太多好处。

@morrisonbrett的解决方案有效import * as moment from 'moment/moment';

我可以用 Angular-CLI v1.4.4 确认同样的问题。 当我看到涉及 momentjs 的错误时,我最初感到很惊讶,因为我的项目没有使用它,但经过调查,我将其注入追溯到 WebPack。

这是我构建时的警告消息:

WARNING in ./node_modules/moment/src/lib/locale/locales.js
Module not found: Error: Can't resolve './locale' in '/Users/scott/Development/web-admin/node_modules/moment/src/lib/locale'
resolve './locale' in '/Users/scott/Development/web-admin/node_modules/moment/src/lib/locale'
  using description file: /Users/scott/Development/web-admin/node_modules/moment/package.json (relative path: ./src/lib/locale)
    Field 'browser' doesn't contain a valid alias configuration
  after using description file: /Users/scott/Development/web-admin/node_modules/moment/package.json (relative path: ./src/lib/locale)
    using description file: /Users/scott/Development/web-admin/node_modules/moment/package.json (relative path: ./src/lib/locale/locale)
      as directory
        /Users/scott/Development/web-admin/node_modules/moment/src/lib/locale/locale doesn't exist
[/Users/scott/Development/web-admin/node_modules/moment/src/lib/locale/locale]
 @ ./node_modules/moment/src/lib/locale/locales.js 65:16-60
 @ ./node_modules/moment/src/lib/locale/locale.js
 @ ./node_modules/moment/src/moment.js
 @ ./src/app/admin-analytics/admin-analytics.component.ts
 @ ./src/$$_gendir/app/app.module.ngfactory.ts
 @ ./src/main.ts
 @ multi ./src/main.ts

我也尝试过import * as moment from 'moment/moment';方法,但我的情况没有运气。

@kud@AleshaOleg——如果你还在尝试导入语言环境:
代替:
import 'moment/locale/*
尝试:
import 'moment/src/locale/*'

一直在这里与同样的问题作斗争......
————
@AleshaOleg :在您的用例中,我认为可能是:
import moment from 'moment'
import 'moment/src/locale/uk'
然后只需调用moment(date).format('ddd')

谢谢@dialnco

在更新到2.19.0 ,我最终通过完全禁用尝试加载语言环境的代码来解决这个问题。

({
  test: /moment\/src\/lib\/locale\/locales.js$/,
  enforce: 'pre',
  use: {
    loader: 'imports-loader',
    options: {
      module: '>undefined', // this disables the if
      require: '>false' // this prevents webpack from trying to parse the requires
    }
  }
})

然后我根据我的应用程序的需要手动添加import 'moment/src/locale/ja'import 'moment/src/locale/pt-br'等,而不是加载所有语言环境。 如果您有创意,您可以使用动态import()来代替仅加载您的应用程序所需的语言。

非常重要的是,如果你这样做,你不做import 'moment/locale/foo' ,而是import 'moment/src/locale/foo' 。 由于语言环境文件尝试引用moment本身的方式,它们将改为捆绑moment的第二个副本(这次是 UMD 构建而不是 ESM 构建),这将在反过来,再次加载所有语言环境。

我希望这对某人有所帮助(上面评论中的选项 1 和 2,感谢@patsissons ):
- 如果您没有任何加载 moment.js 的模块,但您的应用程序有,只需移至旧版本
-如果您有任何模块也有依赖项中的 moment.js 上面的内容对您没有帮助,您必须修改您的 webpack 配置:
{...
解决: {
...
别名:{
'时刻$': '时刻/时刻',
}
}
}

- 但是,如果您使用的是 react-create-app(就像我一样)并且需要尽快进行构建,这是您运行“npm 弹出”的唯一选择,这样您就可以访问 webpack 配置和第二个选项将为您提供。

所以我很抱歉,但在这里工作的唯一方法是@patsissons的方法。 https://github.com/moment/moment/issues/4216#issuecomment -335637520

仍然

import moment from "moment"
import "moment/locale/fr"
moment.locale("fr")

但是在 webpack 中添加

    resolve: {
      alias: {
        'moment$': 'moment/moment',
      }
    },

出于某种原因,yarn 忽略了 package.json 中我的“分辨率”设置。
如果您使用的是moment-timezone ,则修复它的一种hacky方法是编辑yarn.lock

[email protected]:
  version "2.18.1"
  resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"

"moment@>= 2.9.0":
  version "2.18.1"
  resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"

我们等待修复 2.19.1....

有人可以描述这里的实际问题是什么吗? 仅仅是 webpack 没有识别别名 require() 吗?

@TomMettam 2.19.0 将webpack 指向 moment/src/moment 中的 es6 代码,它不会导出与 moment/moment 完全相同的接口。

最重要的是,别名 require 可以防止 webpack 打包所有可能被动态请求的文件。 手动导入语言环境文件是可行的,除了从 moment/locale 导入的明显选择会将它们加载到您实际使用的不同 moment 实例中。

如果这太简单了,不同版本的 yarn/npm 的行为存在差异 - 我碰巧使用的 npm 版本使用根应用程序 node_modules 文件夹中的任何包实例,但其他版本使更难覆盖使用的包。

谁认为在次要版本中更改导出签名是个好主意?

请注意,这也打破了依赖于时刻的 3rd 方库

+1

小升级是不可接受的。

我理解背后的想法,但请对 semver 更加严格。

@darkalor这不是故意的 - 有问题的导出签名只是在有限的一组情况下有实质性的不同 - 那种在暴露给大量用户之前似乎工作得很好的东西。

@darkalor @kud - 发生回归。 请尽量有建设性; 每个人都知道这不应该发生,咆哮对任何人都没有帮助。

@TomMettam是的,它发生了,但是当它发生时你可以处理它,通过处理我的意思是你可以将它升级为主要的,而不是次要的。 就这样。 我不怪任何人,我怪的是如果有人认为“哦,好吧,我可以升级,因为它只是未成年人”的情况,在这种情况下是错误的。 ;)

我感谢当下所做的所有工作,但我只谈论不稳定的情况。

我没有冒犯任何人,对不起。

@kud不是当您必须在知道回归存在之前选择版本号时。 支持 moment 的环境数量所需的复杂程度令人印象深刻。

@tqc但现在你知道了,就是这样。 正如@TomMettam之前

删除或/和添加标签是可能的。

无论如何,我不会再在这里发送垃圾邮件了,感谢您的解决方法;我在更新日志中为没有关注这个问题的其他人添加了一条注释: https: //gist.github.com/ichernev/5f3f4eb02761b4f765a0cccf02cec603#gistcomment -2226628

祝你有美好的一天。 :)

我使用纱线作为我的包管理器。 出于某种原因,我的 yarn.lock 文件没有更新以反映我在 package.json 文件中所做的更改。 我的设置如@daniesy所说。 问题是我的 yarn.lock 文件中的时刻时区仍然取决于时刻版本“^2.18.1”。

为了修复它,我运行了一个yarn cache clean
yarn cache clean

然后 :
yarn install

希望这应该使用以下内容重新生成您的yarn.lock文件:

[email protected]:
  version "0.5.13"
  resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90"
  dependencies:
    moment ">= 2.9.0"

[email protected], [email protected], "moment@>= 2.9.0", moment@^2.17.1:
  version "2.18.1"
  resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" 

无论哪种方式,只需检查您的纱线锁是否试图在任何模块中包含大于 2.18.1 的时刻版本,尤其是时刻-时区和时刻。

我们有一个修复: https :

最好的部分 - 我认为这对 webpack 和 react native 都有效 - 没有悲伤!
我已经在 webpack 中进行了测试,但是有人会使用 React Native 测试吗? 请注意,在使用 npm 链接进行测试之前,您需要运行 grunt release 来构建文件。

@maggiepint - 是否有可能也适用于 Angular-CLI?

2.19.1出来了,试一试

使用 Webkit 对我有用。

谢谢@ichernev和所有参与的人!

@ichernev对我有用
反应 16.
创建反应应用程序。
未弹出

加载这样的时刻:

import moment from 'moment'
import 'moment/locale/fr'

感谢您的修复。 👍

刚刚使用 angular-cli/webpack 启动了另一个 VSTS 构建并重新部署到环境中

一切恢复正常

谢谢

我也可以确认这个问题已在 Angular-CLI v1.4.4 中得到解决。 谢谢!

适用于 typescript/webpack/karma/phantomjs。 感谢您的修复!

为了使它工作,我只是在片刻之前包含了语言环境文件。
import 'moment/locale/de'; import moment from 'moment';
后来做了
moment.locale("de");

似乎仍然存在于“版本”:“2.22.2”?

我也在使用 2.22.2。 问题仍然存在

我正在使用 2.22.2 并看到同样的问题。

如上。 同样的问题,同样的版本。

使用 react native 并在发布版本中看到此错误:

09-04 13:47:38.684 26530 26554 E ReactNativeJS: Requiring unknown module "./locale/de".
09-04 13:47:38.693 26530 26555 E AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
09-04 13:47:38.693 26530 26555 E AndroidRuntime: Process: com.integreat, PID: 26530
09-04 13:47:38.693 26530 26555 E AndroidRuntime: com.facebook.react.common.JavascriptException: Requiring unknown module "./locale/de"., stack:
09-04 13:47:38.693 26530 26555 E AndroidRuntime: c<strong i="6">@2</strong>:649
09-04 13:47:38.693 26530 26555 E AndroidRuntime: i<strong i="7">@2</strong>:394
09-04 13:47:38.693 26530 26555 E AndroidRuntime: t<strong i="8">@2</strong>:324
09-04 13:47:38.693 26530 26555 E AndroidRuntime: vt<strong i="9">@882</strong>:16755
09-04 13:47:38.693 26530 26555 E AndroidRuntime: Mt<strong i="10">@882</strong>:17781
09-04 13:47:38.693 26530 26555 E AndroidRuntime: Mn<strong i="11">@882</strong>:29014
09-04 13:47:38.693 26530 26555 E AndroidRuntime: value<strong i="12">@1006</strong>:1442
09-04 13:47:38.693 26530 26555 E AndroidRuntime: qn<strong i="13">@108</strong>:40634
09-04 13:47:38.693 26530 26555 E AndroidRuntime: tr<strong i="14">@108</strong>:46334
09-04 13:47:38.693 26530 26555 E AndroidRuntime: Nr<strong i="15">@108</strong>:56528
09-04 13:47:38.693 26530 26555 E AndroidRuntime: Ur<strong i="16">@108</strong>:56960
09-04 13:47:38.693 26530 26555 E AndroidRuntime: ui<strong i="17">@108</strong>:61804
09-04 13:47:38.693 26530 26555 E AndroidRuntime: oi<strong i="18">@108</strong>:61224
09-04 13:47:38.693 26530 26555 E AndroidRuntime: Ue<strong i="19">@108</strong>:68050
09-04 13:47:38.693 26530 26555 E AndroidRuntime: Ie<strong i="20">@108</strong>:14248
09-04 13:47:38.693 26530 26555 E AndroidRuntime: We<strong i="21">@108</strong>:14421
09-04 13:47:38.693 26530 26555 E AndroidRuntime: receiveTouches<strong i="22">@108</strong>:15235
09-04 13:47:38.693 26530 26555 E AndroidRuntime: value<strong i="23">@18</strong>:3352
09-04 13:47:38.693 26530 26555 E AndroidRuntime: <unknown><strong i="24">@18</strong>:935
09-04 13:47:38.693 26530 26555 E AndroidRuntime: value<strong i="25">@18</strong>:2621
09-04 13:47:38.693 26530 26555 E AndroidRuntime: value<strong i="26">@18</strong>:907

2.22.1 作品

仍然不为我工作

我也不能让 2.18.1 为我工作

2.22.1 英尺,哈哈

还注意到 v2.22.2 中的回归。 回滚到 2.22.1 为我修复了它。

大家好,

有同样的问题(在 Laravel 中使用 Webpack)。 这并不理想,但对我有用的快速修复是将存储库的“locale”文件夹与 moment.js 或 moment-with-locale.js 文件一起复制。

v2.22.2上也遇到了这个问题。

为了使它工作,我只是在片刻之前包含了语言环境文件。
import 'moment/locale/de'; import moment from 'moment';
后来做了
moment.locale("de");

@mj1856重新打开这个问题合适还是我们应该创建一个新的/新的? 我也再次看到这个。 在我的情况下,回滚到 2.22.1 并没有修复它,我不得不使用@patsissons修复来让 webpack 再次开心。

相同的

我使用了 allowSyntheticDefaultImports,如此处的文档中所述: https ://momentjs.com/docs/#/use -it/typescript/,它为我解决了Cannot find module "./locale"错误。 请注意,在我的 IDE 中还需要导入上方的// @ts-ignore

同样的问题, moment:'2.18.1'

这仍然建议: import moment from "moment/min/moment-with-locales";吗?

b/c 我最终遇到了与[email protected]和 CRA 相同的 (?) 错误:

./node_modules/moment/min/moment-with-locales.js
Module not found: Can't resolve './locale' in '/...myproject/node_modules/moment/min'

对于所有那些互联网路人,如果您使用 rollup 构建,您可以通过以下方式修复它:

假设您正在使用rollup-plugin-node-resolve

import commonjs from "rollup-plugin-commonjs";
import nodeResolve from "rollup-plugin-node-resolve";

export default {
    // your config...
    plugins: [
        nodeResolve({
            mainFields: ["module", "jsnext:main", "main"],
            preferBuiltins: false,
        }),
        commonjs({
            include: "node_modules/**",
        }),
    ]
}

momentpackage.json入门jsnext:main ,我们可以在这里利用。 在构建过程中为我们包含语言环境。 你的包大小会增加,但它会防止控制台错误😅

我的 React 应用程序中的 moment 版本 2.24.0 也有同样的问题。 我想这个问题还没有解决。

我的 React 应用程序中的 moment 版本 2.24.0 也有同样的问题。 我想这个问题还没有解决。

确认。 “时刻”:“2.24.0”。 2.18.1 未解决问题。 节点 v12.16.0

同样在这里,我的 Preact 项目使用2.24.0

还是遇到这个问题请帮忙!!

对我来说,破:“时刻”:“^ 2.24.0”(解析为2.25.0)
未断:“时刻”:“2.24.0”

如果您使用纱线,请添加分辨率块以覆盖子依赖项的版本:

  "resolutions": {
    "moment": "2.24.0"
  }

使用"moment": "2.24.0"并按照@rilyu 的建议,使用分辨率。 为我工作。

恢复到“2.24.0”并删除“^”对我有用。 看起来他们的最新版本昨晚推出了并且正在扔掉它。

面临"moment": "^2.24.0",
Uncaught Error: Cannot find module './locale' at

同样的问题。 使用@enewhuis解决方案解决。 谢谢!

同样的问题。 使用@enewhuis解决方案解决。 谢啦。

解决了@enewhuis和@rilyu 的问题。 谢谢。

同样的问题。 @enewhuis的救援解决方案

对我来说,破:“时刻”:“^ 2.24.0”(解析为2.25.0)
未断:“时刻”:“2.24.0”

谢谢你,我整天都在为此挣扎

相同的错误和相同的修复在这里。 我正在使用时刻时区。

前:

    "moment-timezone": "^0.5.28",

后:

    "moment": "2.24.0",
    "moment-timezone": "^0.5.28",

相同的错误和相同的修复在这里。 我正在使用时刻时区。

前:

    "moment-timezone": "^0.5.28",

后:

    "moment": "2.24.0",
    "moment-timezone": "^0.5.28",

不为我工作 -

    "moment": "2.24.0",
    "moment-timezone": "0.5.28",

上述修复对我不起作用。 Node v12.6.0,yarn v1.22.4,react-scripts-ts

为我们工作

  "resolutions": {
    "moment": "2.24.0"
  },  

 "moment": "2.24.0",
  "moment-timezone": "0.5.28",

使用纱线

如果没有分辨率块,它就无法工作。

是的,我可以确认添加resolutions块对我有用。 我不知道为什么,虽然...

谢谢@mtogstad

@mtogstad解决方案有效!

我不明白这个错误怎么会随机出现并破坏我的反应应用程序

@bodyfarmer你能写下你如何解决它的步骤吗?
我在 React 应用程序中面临同样的问题。

@hasanmehmood在我的情况下,在 CMD 中以这种方式降级依赖项就足够了:

npm install [email protected]

希望这对你也有用。

大家好!
过去几个小时我遇到了同样的问题,最后我通过更改时刻版本解决了它。

在上面的评论中,我看到了最终的解决方案。

原因:
_moment 17小时前发布新版本从2.24.0到2.25.0_

解决方案:
第 1 步:更改版本

  • "时刻": "2.24.0",
  • “时刻时区”:“^0.5.28”,

第 2 步:如果您使用纱线,请在您的 package.json 文件中添加分辨率,如下所示
“依赖”{
"时刻": "2.24.0",
“时刻时区”:“^0.5.28”
},
“决议”:{
“时刻”:“2.24.0”
},

谢谢。

谢谢, @jolalla ,我首先尝试降级版本,但对我不起作用。 最后添加分辨率块显示了一些魔法:)

对于其他在 React 应用程序中遇到类似问题的人。 他们可以执行以下 2 个步骤来解决它。

在依赖项中,替换
"moment": "^2.24.0",

"moment": "2.24.0",

并在 package.json 中添加分辨率块

"resolutions": {
    "moment": "2.24.0"
  }

为什么这个问题被关闭了!?!??!?

切换到 luxon 的好时机,这是我为一个时刻使用率低的项目所做的。

有同样的问题
“决议”:{
“时刻”:“2.24.0”
}
解决我的问题。
谢谢。

还有什么我可以尝试的吗? "moment": "2.24.0" ,和
"resolutions": { "moment": "2.24.0" }
不是为我修的。 这是用于 Heroku 部署的。 任何想法表示赞赏。

如果碰巧其他人拥有 monorepo(和/或正在使用 package.json 中的工作区),则使用前一时刻版本 2.24.0 的“解决方案”修复仅在应用到根级别 package.json 时才有效。 在我们的案例中,我们必须执行以下操作:
{“分辨率”:{“**/时刻”:“2.24.0”}}。

真的希望 2.25 版尽快得到正确修复!

如果您使用纱线,请添加分辨率块以覆盖子依赖项的版本:

  "resolutions": {
    "moment": "2.24.0"
  }

我已经处理了一个小时。 删除^帮助。

对于使用 create-react-app 并且不想弹出 CRA 的人,您可以安装:

然后在项目的根目录创建一个config-overrides.js以进一步覆盖。

module.exports = function override(config, env) {
  // do stuff with the webpack config...
  return config;
};

编辑您的 package.json:

"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",

因为我使用蚂蚁设计,所以我的config-overrides.js看起来像这样:

const { override, fixBabelImports } = require("customize-cra");
const webpack = require("webpack");

const fixMomentJs = (config) => {
  config.plugins.push(
    new webpack.ContextReplacementPlugin(/^\.\/locale$/, (context) => {
      if (!/\/moment\//.test(context.context)) {
        return;
      }
      // context needs to be modified in place
      Object.assign(context, {
        // include locales
        regExp: /^\.\/(fr|en)/,
        // point to the locale data folder relative to moment's src/lib/locale
        request: "../../locale",
      });
    })
  );
  return config;
};

module.exports = override(
  fixMomentJs,
  fixBabelImports("import", {
    libraryName: "antd",
    libraryDirectory: "es",
    style: "css",
  })
);

但你的会更简单,我认为是这样的:

module.exports = function override(config, env) {
  config.plugins.push(
    new webpack.ContextReplacementPlugin(/^\.\/locale$/, (context) => {
      if (!/\/moment\//.test(context.context)) {
        return;
      }
      // context needs to be modified in place
      Object.assign(context, {
        // include locales
        regExp: /^\.\/(fr|en)/,
        // point to the locale data folder relative to moment's src/lib/locale
        request: "../../locale",
      });
    })
  );
  return config;
};

谢谢, @jolalla ,我首先尝试降级版本,但对我不起作用。 最后添加分辨率块显示了一些魔法:)

对于其他在 React 应用程序中遇到类似问题的人。 他们可以执行以下 2 个步骤来解决它。

在依赖项中,替换
"moment": "^2.24.0",

"moment": "2.24.0",

并在 package.json 中添加分辨率块

"resolutions": {
    "moment": "2.24.0"
  }

为我工作。 谢谢

@hasanmehmood对我

谢谢, @jolalla ,我首先尝试降级版本,但对我不起作用。 最后添加分辨率块显示了一些魔法:)

对于其他在 React 应用程序中遇到类似问题的人。 他们可以执行以下 2 个步骤来解决它。

在依赖项中,替换
"moment": "^2.24.0",

"moment": "2.24.0",

并在 package.json 中添加分辨率块

"resolutions": {
    "moment": "2.24.0"
  }

也适用于我! 谢谢!! :D

使用 npm 在我的 angular 8 应用程序上这样做了几个小时。

  1. 我从 2.17 时刻更新到 2.24
  2. 我按照上面的建议添加了分辨率 - "devDependencies": {...},"resolutions": { "moment": "2.24.0" }到 package.json
  3. 通过执行以下操作更改为纱线。 rm -rf node_modules package-lock.json && yarn
    非常感谢各位

我非常绝望......我正在使用时刻 2.25.1 并更改 "devDependencies": {...},"resolutions": { "moment": "2.25.1" } 如上所述......不是在职的

我正在使用 npm。 我是 react 的新手,devDependencies 在哪里?
我已经改变了这一点,但它仍然无法正常工作
Capture

我正在使用版本“2.25.1”并且仍在发生!

@m4mariaoni - 那是因为你没有安装--save-dev ,所以你正在改变正确的部分。

如果您在将 moment 锁定到 2.24.0 后仍然遇到此问题,请从 node_modules 删除 moment 文件夹并使用npm install --save重新安装您的软件包

谢谢, @jolalla ,我首先尝试降级版本,但对我不起作用。 最后添加分辨率块显示了一些魔法:)

对于其他在 React 应用程序中遇到类似问题的人。 他们可以执行以下 2 个步骤来解决它。

在依赖项中,替换
"时刻": "^2.24.0",

"时刻": "2.24.0",

并在 package.json 中添加分辨率块

“决议”:{
“时刻”:“2.24.0”
}

也适用于我! 谢谢!! :D!想!

谢谢, @jolalla ,我首先尝试降级版本,但对我不起作用。 最后添加分辨率块显示了一些魔法:)

对于其他在 React 应用程序中遇到类似问题的人。 他们可以执行以下 2 个步骤来解决它。

在依赖项中,替换
"moment": "^2.24.0",

"moment": "2.24.0",

并在 package.json 中添加分辨率块

"resolutions": {
    "moment": "2.24.0"
  }

更换

"moment": "^2.24.0",

"moment": "2.24.0",

为我工作! 通常,
rm -rf package-lock.json && node_modules

尽管采取了上述所有措施,但仍然无法正常工作......

这令人沮丧

以前创建的存储库与 React 一起使用了 moment 2.24.0,它仍在工作,但现在安装 moment2.24.0,不起作用......(我也尝试过上述所有措施)

原因是什么?

我想你可能在 package.json @wlsdud2194 的某个地方有一个 ^2.24.0 而不是 2.24.0?

我没有,但错误仍然不断出现。 有点奇怪

时刻版本是 package.json 中的2.24.0而不是^2.24.0 ,因为我安装了它。

我按照这个流程,上面的措施之一

  1. 添加分辨率块
  2. 删除node_modules目录并从纱线重新安装包。

对我有用,但不知道为什么工作......😂

感谢您的关注:) @agrohs

不得不从^2.25.1降级到2.24.0来解决这个问题

我没有,但错误仍然不断出现。 有点奇怪

尝试运行npm ls moment以查看是否有其他模块也使用 moment

And add the resolutions block in package.json
"resolutions": { "moment": "2.24.0" }

remove node_modules directory and reinstall package from yarn.

rm -rf package-lock.json && node_modules
 

联系人:刘先生
联系电话:18908205973
传真:028-86676917
E-mail:[email protected]
公司名称:成都首志科技有限公司
公司网址:www.szdma.com
地址:成都市滨江东路162号银海大厦


     成都首志科技有限公司成立于2010年,是成都一家面向中小企业的专业软件定制开发公司,公司主要服务对象是中小企业,提供局域网搭建、网站建设、软件定制解决方案等,并提供从手工业务到电脑业务一整套服务。公司以“诚信为本,服务至上”的原则,突现公司形象;通过我们不懈努力,为客户提供优质服务。

 

我们收到Webpack Error: Cannot find module "./locale"错误。 我们在我们的项目中使用了“react-redux-i18n”包,它依赖于“react-i18nify”,而这又依赖于“moment”。 内部“时刻”配置为使用导致此错误的最新版本。

npm

在依赖项中
“反应”:“^ 16.8.1”,
"时刻": "2.24.0",
“时刻时区”:“^0.5.28”,
"react-moment-proptypes": "^1.5.0",
"react-redux-i18n": "^1.9.3",
"react-redux": "^6.0.0",

任何帮助将不胜感激。

最新的补丁2.25.3好像已经修复了,更新momentjs版本为: "moment": "^2.25.3" in package.json
删除 node_modules 文件夹,然后运行yarn installnpm install应该这样做。

对于那些已经失去信心,并且不希望他们的应用程序在未来再次发生的问题完全摆脱的人 - 我将一个中等大小的代码库切换到 luxon 没有太多麻烦。

谢谢大家...

我将版本更改为 24.0 并添加了 "resolutions": { "moment": "2.24.0" } 并运行 npm install

然后它似乎又工作了(顺便说一下,与 React 一起工作)。

干杯!

最新的补丁2.25.3好像已经修复了,更新momentjs版本为: "moment": "^2.25.3" in package.json
删除 node_modules 文件夹,然后运行yarn installnpm install应该这样做。

谢谢@jasontll ,它对我

今天这些解决方案都不适合我。

在我的反应应用程序上这样做了几个小时
与 npm。

1. I updated from moment  2.17 to 2.24

2. I added the resolutions as adviced above - `"devDependencies": {...},"resolutions": { "moment": "2.24.0"   }` to package.json

3. Changed to yarn by doing the following. `rm -rf node_modules package-lock.json && yarn`
   Thanks a lot guys

它也对人们有用,非常感谢:-)

我也遇到这个麻烦。 我已经用"moment": "^2.26.0"的最新版本修复了它

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

相关问题

benhathaway picture benhathaway  ·  3评论

M-Zuber picture M-Zuber  ·  3评论

4rg0n picture 4rg0n  ·  3评论

chitgoks picture chitgoks  ·  3评论

vbullinger picture vbullinger  ·  3评论