Moment: 未捕获的错误:找不到模块“./locale”

创建于 2020-05-01  ·  69评论  ·  资料来源: moment/moment

描述错误
构建生产优化构建后,我在 chrome 控制台上收到此错误

未捕获的错误:找不到模块“./locale”
在 2.d0944550.chunk.js:1
在模块。(2.d0944550.chunk.js:1)
在 f ((索引):1)
在 Module.837 (main.091f08fc.chunk.js:1)
在 f ((索引):1)
在 Object.540 (main.091f08fc.chunk.js:1)
在 f ((索引):1)
在 ((索引):1)
在 Array.e [as push] ((index):1)
在 main.091f08fc.chunk.js:1

这是我的 package.json

{
  "name": "sheetgo-front-end",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@allpro/react-router-pause": "^1.1.3",
    "@material-ui/core": "^4.4.2",
    "@material-ui/icons": "^4.5.1",
    "@material-ui/lab": "^4.0.0-alpha.26",
    "@material-ui/styles": "^4.4.1",
    "@material/icon-button": "^3.1.0",
    "@material/react-button": "^0.15.0",
    "@material/react-card": "^0.15.0",
    "@material/react-icon-button": "^0.15.0",
    "@material/react-material-icon": "^0.15.0",
    "@material/react-select": "^0.15.0",
    "@material/react-tab": "^0.15.0",
    "@mdi/js": "^3.4.93",
    "@mdi/react": "^1.1.0",
    "@stripe/react-stripe-js": "^1.1.0",
    "@stripe/stripe-js": "^1.2.0",
    "@svgr/webpack": "^4.1.0",
    "apexcharts": "^3.8.6",
    "axios": "^0.19.2",
    "browser-info": "^1.2.0",
    "chart.js": "^2.7.2",
    "classnames": "^2.2.6",
    "color-sort": "^0.0.1",
    "connected-react-router": "^6.5.2",
    "countup.js": "^1.9.3",
    "cra-append-sw": "^2.7.0",
    "filepond": "4.1.0",
    "filepond-plugin-file-validate-size": "2.1.1",
    "filepond-plugin-file-validate-type": "1.2.2",
    "form-serialize": "^0.7.2",
    "fuse.js": "^3.4.2",
    "history": "^4.10.1",
    "inputmask": "^4.0.0",
    "is-mobile": "^2.0.0",
    "jquery": "^3.3.1",
    "jquery-ui-sortable-npm": "^1.0.0",
    "js-cookie": "^2.2.0",
    "lodash": "^4.17.10",
    "markdown-to-jsx": "^6.10.3",
    "material-components-web": "^3.1.0",
    "material-ui-chip-input": "^1.0.0",
    "md5": "^2.2.1",
    "memoize-one": "^5.0.4",
    "moment": "^2.22.2",
    "moment-timezone": "^0.5.27",
    "onecolor": "^3.1.0",
    "p-queue": "^6.1.1",
    "payform": "^1.2.2",
    "promise-throttle": "^1.0.0",
    "prop-types": "^15.7.0",
    "query-string": "^6.5.0",
    "react": "^16.8.1",
    "react-apexcharts": "^1.3.3",
    "react-dom": "^16.8.1",
    "react-draggable": "4.2.0",
    "react-filepond": "7.0.1",
    "react-google-authorize": "^1.0.4",
    "react-hotjar": "^2.0.0",
    "react-id-swiper": "^1.6.8",
    "react-intl": "^2.5.0",
    "react-modal-video": "^1.2.3",
    "react-redux": "^7.1.1",
    "react-resizable": "^1.8.0",
    "react-router": "^5.1.2",
    "react-router-dom": "^5.1.2",
    "react-router-last-location": "^2.0.1",
    "react-scripts": "^2.1.4",
    "react-sizeme": "^2.5.2",
    "react-stripe-elements": "^4.0.0",
    "react-text-mask": "^5.4.3",
    "react-virtualized-auto-sizer": "^1.0.2",
    "react-vis-network": "^1.0.0",
    "react-window": "^1.8.1",
    "recompose": "^0.30.0",
    "redux": "^4.0.4",
    "redux-react-session": "^2.4.0",
    "redux-saga": "^1.1.1",
    "redux-thunk": "^2.3.0",
    "socket.io-client": "^2.3.0",
    "sort-by": "^1.2.0",
    "tether": "^1.4.4",
    "throttle-debounce": "^2.1.0",
    "url-loader": "^1.0.1"
  }

如果我在本地使用纱线为开发版本构建它可以工作

再现
重现行为的步骤:
构建具有这些要求的应用程序。 应该在控制台上得到那个错误。

预期行为
对您期望发生的事情的清晰简洁的描述。

截图
如果适用,请添加屏幕截图以帮助解释您的问题。

桌面(请填写以下信息):

  • 操作系统:[例如iOS]
  • 浏览器 [例如 chrome、safari]
  • 版本 [例如 22]

智能手机(请填写以下信息):

  • 设备:[例如 iPhone6]
  • 操作系统:[例如iOS8.1]
  • 浏览器 [例如股票浏览器、safari]
  • 版本 [例如 22]

特定时刻的环境

  • 运行代码的机器的时区设置
  • 代码运行的时间和日期
  • 正在使用的其他库(TypeScript、Immutable.js 等)

请在您的环境中运行以下代码并包含输出:

console.log((new Date()).toString())
console.log((new Date()).toLocaleString())
console.log((new Date()).getTimezoneOffset())
console.log(navigator.userAgent)
console.log(moment.version)

附加上下文
在此处添加有关该问题的任何其他上下文。

最有用的评论

同样的问题,

通过删除版本号之前的插入符号来修复。 Package.json 条目现在看起来像:
“时刻”:“2.24.0”

看起来像是新版本的错误。

所有69条评论

确切地。我刚遇到这个错误,看到他们几个小时前才推送了一个新版本。

如果您使用纱线,请将分辨率块添加到 package.json 以覆盖子依赖项的版本,它对我有用

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

同样在这里!

另外 2.24.0 仍然有警告: ./node_modules/chart.js/node_modules/moment/src/lib/locale/locales.js Critical dependency: the request of a dependency is an expression

只是重现这个问题

一样!

  • 1

同样的问题,

通过删除版本号之前的插入符号来修复。 Package.json 条目现在看起来像:
“时刻”:“2.24.0”

看起来像是新版本的错误。

今晚我安装了 Jest,它产生了一个问题,我被指示删除任何 yarn.lock 和 package.lock 文件以及我的模块文件夹,并执行 yarn install 或 npm install。 当我安装 yarn 时,我收到了这个线程中提到的错误 - 出现的页面说该错误是一个 webpack 错误并指向时刻时区。 当我删除我的锁定文件、模块文件夹并使用npm install (而不是纱线安装)重新安装时 - 一切正常。简而言之,当我使用不同的包管理器命令时,它改变了结果。

请以这种方式删除 package.json 中的 ^ 对我有用👍

由于 is-promise 库,本周早些时候发生了奇怪的此类事件,还有像 ^ 这样的问题需要删除。 我相信人们现在或多或少会为所有 package.json 严格版本而不是 ^

尝试从 package.json 中删除插入符号并运行 + rm -rf node_modules + yarn并且我在运行 webpack 时仍然遇到这个问题

我使用的是时刻时区,它默认为 2.25。 删除插入符号没有区别

同样在这里!

这对我有用,我正在使用 create-react-app。
// 在 webpack.config.js 中

plugins: [
...
// new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
// replace the line above with below, regex to match the locale you want to use
new webpack.ContextReplacementPlugin(/moment[\/\\]locale/,  /(en|zh-cn)\.js/)
...
]

他们的最新版本似乎存在问题。 我不得不在没有“^”的情况下恢复到“2.24.0”,这允许我的网站建立。

在我的一个基于 gatsby 的项目中,moment 版本2.25.0有同样的问题:

Cannot find module './locale'                              


> 1 | import { Moment } from './constructor';                                                                                                 
    | ^                                                                                                                                       
  2 |                                                                                                                                         
  3 | var proto = Moment.prototype;                                                                                                           
  4 |                                                                                                                                         


  WebpackError: Cannot find module './locale'                                                                                                 

  - prototype.js:1 webpackMissingModule                                                                                                       
    node_modules/moment/src/lib/moment/prototype.js:1:1                                                                                       

  - prototype.js:1 Module../node_modules/moment/src/lib/moment/prototype.js                                                                   
    node_modules/moment/src/lib/moment/prototype.js:1:1                                                                                       

  - moment.js:1 Module../node_modules/moment/src/lib/moment/moment.js                                                                         
    node_modules/moment/src/lib/moment/moment.js:1:1                                                                                          

  - moment.js:1 Module../node_modules/moment/src/moment.js                                                                                    
    node_modules/moment/src/moment.js:1:1

随着时刻2.24.0没有这样的问题。

有人可以提供一个最小的(非)工作示例以便对此进行调查吗?

我不得不恢复到“2.24.0”,瞬间找不到'./locale'

这对我来说非常有效: https :

有人可以提供一个最小的(非)工作示例以便对此进行调查吗?

@ichernev - 请找到附件。 只需运行 npm install 和 npm start :)

问题5484.zip

要求的处理已恢复为 2.24.0 行为。

已在 2.25.1 中修复。

我已经更新到版本2.25.1 ,但我仍然遇到错误。

prototype.js:1 Uncaught Error: Cannot find module './locale'
    at webpackMissingModule (prototype.js:1)
    at Module../node_modules/moment/src/lib/moment/prototype.js (prototype.js:1)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../node_modules/moment/src/lib/moment/moment.js (moment.js:1)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../node_modules/moment/src/moment.js (moment.js:1)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../src/Menu.js (Home.js:186)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../src/App.js (Add.js:157)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Module../src/index.js (index.css?02e3:45)
    at __webpack_require__ (bootstrap:782)
    at fn (bootstrap:150)
    at Object.0 (serviceWorker.js:135)
    at __webpack_require__ (bootstrap:782)
    at checkDeferredModules (bootstrap:45)
    at Array.webpackJsonpCallback [as push] (bootstrap:32)
    at main.chunk.js:1

但也许我做错了什么。 有人能确认这个错误在 2.25.1 中已经消失了吗?

我和时刻时区也有同样的问题。 我试过强制使用 2.24.0,但仍然是同样的问题,因为我猜测 moment-timezone 使用最新的?

仍然收到错误

@strange1120[email protected]
如果您使用纱线,请尝试yarn why moment以显示已安装的 deps。

@ichernev抱歉,我可以确认 2.25.1 会引发相同的错误。 使用我之前上传的应用程序和一个干净的 node_modules/package-lock.json,我可以看到版本是 2.25.1 但仍然抛出。

为什么这些问题都关闭了……这造成了严重破坏

我也是。 我以为是我的 Docker

删除了建议 - 在 2020 年不值得:( @ichernev 有任何更新吗?

对于使用 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;
};

对于有权访问 Webpack 的人,您可以将以下条目添加到 Webpack 配置中的插件数组中:

    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",
      });
    })

在发布修复程序之前,正如@saadzr所提到的,您可以暂时将时间分配给“2.24.0”版本。 删除插入符号:“^”。

对于那些不知道如何去做的人。 找到使用 moment: npm ls moment 。 你可能会看到:

└─┬ [email protected]
  ├── [email protected] 
  └─┬ [email protected]
    └── [email protected]  deduped

所以里面antd/package.jsonrc-picker/package.jsondependencies

"moment": "^2.24.0", -> "moment": "2.24.0"

并运行npm i两次。 不知道为什么需要两次,但它只在两次后有效。

@talgat-ruby 这意味着编辑未推送到存储库的 node_modules 文件夹,克隆项目的人每次都必须这样做,我认为这不是一个好的解决方法。
例如,我们与多个合作者合作,我们不能告诉他们每次克隆存储库时都这样做。
在发布修复程序之前修复此问题的最佳方法是按照上面提到的方式配置 Webpack。

@nathanagez这是一个临时修复。 Antd 团队可能会很快发布官方修复程序。 是的,你是对的,你不能依赖它。

@talgat-ruby 我解释了如何配置 Webpack,请参阅上层,以便您可以将解决方法推送到您的存储库中。

我可以确认@talgat-ruby 的建议为我解决了这个问题。

@rilyu你的建议对我

我正在使用 moment-timezone 并且暂时没有指定版本。
看来,在安装过程中,渴望安装最新版本的 moment 作为依赖项 -> [email protected]并且它不兼容。

确实添加
“决议”:{“时刻”:“2.24.0”}
解决了这个问题。

太谢谢了

开发者有消息吗?

使用 MaterialUI DatePicker 获取此错误。 尝试手动回滚到 2.24.0,但我没有运气。 希望尽快解决这个问题。 我想我现在会使用原生的 TextField type="date"。

同样的问题,

通过删除版本号之前的插入符号来修复。 Package.json 条目现在看起来像:
“时刻”:“2.24.0”

看起来像是新版本的错误。

这对我有用! 田纳西州

我遇到了同样的问题,我删除了 node_modules 文件夹,然后将 moment 的版本更改为 2.24.0,然后再次安装,问题仍然存在。
当我检查 rc-calendar 使用的是 2.25.1 这样的东西时。 我尝试在那里编辑并做了yarn install仍然问题仍然存在。 请帮助我处理一个重要的项目

@faizhameed尝试删除 node-modules 文件夹。
也删除你的 package-lock.json (如果你使用 yarn.lock 也一样)。

在依赖项之后将其添加到您的 package.json 中:{
...
},
分辨率:{“时刻”:“2.24.0”}

它应该强制 rc-datepicker 使用 moment 2.24

升级到 2.25.0 和 2.25.1 后同样的问题。
对我有用的唯一解决方案是降级到 2.24.0

不幸的是,我有同样的问题。 出于某种原因,package.json 中的解决方案对我不起作用。
resolutions: { "moment": "2.24.0" }

现在我要像@pcarballeda一样

对我来说,将版本修复为"moment": "2.24.0"并添加resolutions: { "moment": "2.24.0" }暂时解决了问题。

找不到模块:错误:无法解析“D:\Downloads\Telegram\ildamnode_modules\rc-pickernode_modules\momentsrc\lib\locale”中的“./locale”

如何克服?

“时刻”:“2.24.0”

“依赖关系”:{
"antd": "^4.2.0",
"axios": "^0.19.2",
"classnames": "^2.2.6",
"cross-env": "^7.0.2",
"dva": "^2.4.1",
"dva-model-extend": "^0.1.2",
"less-vars-to-js": "^1.3.0",
"libphonenumber-js": "^1.7.50",
"lodash": "^4.17.15",
"lodash.clonedeep": "^4.5.0",
"时刻": "2.24.0",
"nprogress": "^0.2.0",
"路径到正则表达式": "^6.1.0",
“道具类型”:“^15.7.2”,
"查询字符串": "^6.12.1",
“反应”:“^ 16.13.1”,
"反应货币格式": "^1.0.0",
"react-custom-scrollbars": "^4.2.1",
"react-dom": "^16.13.1",
"反应头盔": "^6.0.0",
"react-perfect-scrollbar": "^1.5.8",
"svg-sprite-loader": "^4.2.1",
"umi-plugin-locale": "^2.11.5"
},

降级到 2.24.0 对我有用。 用 2.24.0 删除 ^。
还手动将 package-lock.json 中的所有 moment 依赖项更新为 2.24.0。

2.24 有问题,试图提出“决议”……但我没有更新到 2.25,怎么了? 它在星期四工作。

降级到 2.24.0 对我有用。 用 2.24.0 删除 ^。
还手动将 package-lock.json 中的所有 moment 依赖项更新为 2.24.0。

谢谢工作! 纱线有问题。 与 Npm 合作

在发布修复程序之前,正如@saadzr所提到的,您可以暂时将时间分配给“2.24.0”版本。 删除插入符号:“^”。

对于那些不知道如何去做的人。 找到使用 moment: npm ls moment 。 你可能会看到:

└─┬ [email protected]
  ├── [email protected] 
  └─┬ [email protected]
    └── [email protected]  deduped

所以里面antd/package.jsonrc-picker/package.jsondependencies

"moment": "^2.24.0", -> "moment": "2.24.0"

并运行npm i两次。 不知道为什么需要两次,但它只在两次后有效。

在职的! <3

yarn remove + yarn add moment安装的版本 2.25.2 对我来说很好

yarn remove + yarn add moment安装的版本 2.25.2 对我来说很好

这个版本不会有问题吧?

@Shakxzod-Namazbaev 我认为最初的问题出在 2.25.0 版本上,有些人报告说 2.25.1 中发生了同样的问题,其他人提到降级到 2.24 对他们有用。 在我的情况下,版本 2.25.2 似乎可以工作,所以也许不需要降级

@Shakxzod-Namazbaev 我认为最初的问题出在 2.25.0 版本上,有些人报告说 2.25.1 中发生了同样的问题,其他人提到降级到 2.24 对他们有用。 在我的情况下,版本 2.25.2 似乎可以工作,所以也许不需要降级

所以你现在对 2.25.2 版本没有问题,对吧?

@Shakxzod-Namazbaev 完全正确,2.25.2 对我来说很好用。

我可以确认 - 时刻2.25.2也适用于我。

我认为2.25.2在独立形式中是可以的,但在打包管理形式中,它仍然被破坏(在我的例子中,moment 是时刻时区的依赖项)。

2.24.0仍然适用于使用 webpack 和其他依赖于时刻的包的人。

版本 2.25.2以包管理形式对我有用 - 在基于 gatsby 的项目中配置的 webpack(版本2.25.0没有):

相关的package.json行:

dependencies: {
    ...
    "moment": "^2.25.2",
    ...
}

不过,我没有使用moment-timezone

太疯狂了,这个问题报告仍然处于关闭状态,有这么多人受到影响,到目前为止唯一的“解决方案”是降级到旧版本!?!?!

@ichernev谢谢! 更新到 2.25.2 为我解决了这个问题!

--- a/front/package.json
+++ b/front/package.json
@@ -5,7 +5,7 @@
   "dependencies": {
-    "moment": "^2.22.2",
+    "moment": "^2.25.2",

行。 我夸得太早了。 虽然与时刻ver。 2.25.2 webpack 能够无错误地生成工作包,但导入语言环境不再起作用 - 看起来它被忽略了(也许这与sideEffects / tree splash 有关?)。

例如:

import moment from "moment"
import "moment/locale/pl"

// set global 'moment' locale (polish)
moment.locale("pl")

// ... somewhere later
console.log(moment().format("DD MMMM YYYY HH:mm:ss"))

版本2.25.2输出为04 May 2020 16:38:15 ,这是不正确的,因为它应该是
04 maja 2020 16:38:58

因此,版本2.24.0仍然是最后一个可用的版本。

我遇到了同样的问题,从版本中删除胡萝卜解决了这个问题。

像这样在你的 package.json 文件中 --- "moment": "2.24.0"

版本:2.24.0

好吧,我在本地测试,我真的不知道为什么,但是如果它是 package.json 属性module那么它就坏了。 如果只有jsnext:main它正在工作。 这与区域设置文件未正确加载有关,但仍包含在包中。

所以这个取代jsnext:main 的“现代”模块属性不仅仅是重命名或替代名称。 它有一些没有得到很好宣传的隐藏议程。

2.25.3 没有module

@ichernev - 谢谢! 我可以确认版本2.25.3有效(webpack 能够无错误地生成包并且包含/设置区域设置按预期工作)。

为我修复了 2.25.3。

同样的问题,

通过删除版本号之前的插入符号来修复。 Package.json 条目现在看起来像:
“时刻”:“2.24.0”

看起来像是新版本的错误。

在那之后工作!

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

相关问题

slavafomin picture slavafomin  ·  3评论

ninigix picture ninigix  ·  3评论

benhathaway picture benhathaway  ·  3评论

dogukankotan picture dogukankotan  ·  3评论

chitgoks picture chitgoks  ·  3评论