ant-design-pro: 🐛[BUG] Error: Cannot find module './locale'

🐛 bug 描述

无法访问localhost:8000,加载一段时间后报错 Error: Cannot find module './locale'

📷 复现步骤

  1. 新建项目,Javascript + antd4
  2. yarn
  3. yarn start
  4. 访问 localhost:8000

🏞 期望结果

正常运行

© 版本信息

  • Ant Design Pro 版本 新建工程
  • umi 版本 新建工程
  • 浏览器环境 Firefox
  • 开发环境 Linux

🚑 其他信息

{
  "name": "ant-design-pro",
  "version": "1.0.0",
  "private": true,
  "description": "An out-of-box UI solution for enterprise applications",
  "scripts": {
    "analyze": "cross-env ANALYZE=1 umi build",
    "build": "umi build",
    "deploy": "npm run site && npm run gh-pages",
    "dev": "npm run start:dev",
    "fetch:blocks": "pro fetch-blocks --branch=umi@3 && npm run prettier",
    "gh-pages": "cp CNAME ./dist/ && gh-pages -d dist",
    "i18n-remove": "pro i18n-remove --locale=zh-CN --write",
    "postinstall": "umi g tmp",
    "lint": "umi g tmp && npm run lint:js && npm run lint:style && npm run lint:prettier",
    "lint-staged": "lint-staged",
    "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx ",
    "lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src && npm run lint:style",
    "lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
    "lint:prettier": "prettier --check \"**/*\" --end-of-line auto",
    "lint:style": "stylelint --fix \"src/**/*.less\" --syntax less",
    "prettier": "prettier -c --write \"**/*\"",
    "start": "umi dev",
    "start:dev": "cross-env REACT_APP_ENV=dev MOCK=none umi dev",
    "start:no-mock": "cross-env MOCK=none umi dev",
    "start:no-ui": "cross-env UMI_UI=none umi dev",
    "start:pre": "cross-env REACT_APP_ENV=pre umi dev",
    "start:test": "cross-env REACT_APP_ENV=test MOCK=none umi dev",
    "pretest": "node ./tests/beforeTest",
    "test": "umi test",
    "test:all": "node ./tests/run-tests.js",
    "test:component": "umi test ./src/components",
    "tsc": "tsc"
  },
  "husky": { "hooks": { "pre-commit": "npm run lint-staged" } },
  "lint-staged": {
    "**/*.less": "stylelint --syntax less",
    "**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js",
    "**/*.{js,jsx,tsx,ts,less,md,json}": ["prettier --write"]
  },
  "browserslist": ["> 1%", "last 2 versions", "not ie <= 10"],
  "dependencies": {
    "@ant-design/icons": "^4.0.0",
    "@ant-design/pro-layout": "^5.0.8",
    "@ant-design/pro-table": "2.2.1",
    "antd": "^4.0.0",
    "classnames": "^2.2.6",
    "lodash": "^4.17.11",
    "moment": "^2.24.0",
    "omit.js": "^1.0.2",
    "path-to-regexp": "2.4.0",
    "qs": "^6.9.0",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-helmet-async": "^1.0.4",
    "umi": "3.1.1",
    "umi-request": "^1.0.8",
    "use-merge-value": "^1.0.1"
  },
  "devDependencies": {
    "@ant-design/pro-cli": "^1.0.18",
    "@types/classnames": "^2.2.7",
    "@types/express": "^4.17.0",
    "@types/history": "^4.7.2",
    "@types/jest": "^25.1.0",
    "@types/lodash": "^4.14.144",
    "@types/qs": "^6.5.3",
    "@types/react": "^16.9.17",
    "@types/react-dom": "^16.8.4",
    "@types/react-helmet": "^5.0.13",
    "@umijs/fabric": "^2.0.5",
    "@umijs/plugin-blocks": "^2.0.5",
    "@umijs/preset-ant-design-pro": "^1.2.0",
    "@umijs/preset-react": "^1.4.8",
    "@umijs/preset-ui": "^2.0.9",
    "carlo": "^0.9.46",
    "chalk": "^4.0.0",
    "cross-env": "^7.0.0",
    "cross-port-killer": "^1.1.1",
    "detect-installer": "^1.0.1",
    "enzyme": "^3.11.0",
    "eslint": "^6.8.0",
    "express": "^4.17.1",
    "gh-pages": "^2.0.1",
    "husky": "^4.0.7",
    "jsdom-global": "^3.0.2",
    "lint-staged": "^10.0.0",
    "mockjs": "^1.0.1-beta3",
    "prettier": "^2.0.1",
    "pro-download": "1.0.1",
    "puppeteer-core": "^3.0.0",
    "stylelint": "^13.0.0"
  },
  "engines": { "node": ">=10.0.0" },
  "checkFiles": [
    "src/**/*.js*",
    "src/**/*.ts*",
    "src/**/*.less",
    "config/**/*.js*",
    "scripts/**/*.js"
  ]
}
Error: Cannot find module './locale'
__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./node_modules/moment/src/lib/moment/moment.js
./node_modules/moment/src/lib/moment/moment.js:1
__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./node_modules/moment/src/moment.js
./node_modules/moment/src/moment.js:1
__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./src/.umi/plugin-locale/locale.tsx
http://localhost:8000/umi.js:215868:83
__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./src/.umi/plugin-locale/runtime.tsx
./src/.umi/plugin-locale/runtime.tsx:1

> 1 | import React from 'react';
  2 | // @ts-ignore
  3 | import { _LocaleContainer } from './locale';
  4 | import { getIntl, getLocale } from './localeExports';

__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./src/.umi/core/plugin.ts
./src/.umi/core/plugin.ts:19

  16 |   path: '../plugin-initial-state/runtime',
  17 | });
  18 | plugin.register({
> 19 |   apply: require('/home/rapiz/Source/Work/outsource/demo/client/src/.umi/plugin-locale/runtime.tsx'),
  20 |   path: '/home/rapiz/Source/Work/outsource/demo/client/src/.umi/plugin-locale/runtime.tsx',
  21 | });
  22 | plugin.register({

__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./src/.umi/core/umiExports.ts
./src/.umi/core/umiExports.ts:1

> 1 | export { history, setCreateHistoryOptions } from './history';
  2 | export { plugin } from './plugin';
  3 | export * from '../plugin-dva/exports';
  4 | export * from '../plugin-dva/connect';

__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./node_modules/umi/dist/index.esm.js
./node_modules/umi/dist/index.esm.js:1
__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./src/global.jsx
http://localhost:8000/umi.js:217395:80
__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

./src/.umi/umi.ts
./src/.umi/umi.ts:1

> 1 | import './core/polyfill';
  2 | import '@@/core/devScripts';
  3 | import '../global.jsx';
  4 | import { plugin } from './core/plugin';

__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

fn
./webpack/bootstrap:129

  126 | 		);
  127 | 		hotCurrentParents = [];
  128 | 	}
> 129 | 	return __webpack_require__(request);
      | ^  130 | };
  131 | var ObjectFactory = function ObjectFactory(name) {
  132 | 	return {

0
http://localhost:8000/umi.js:219559:18
__webpack_require__
./webpack/bootstrap:773

  770 | };
  771 | 
  772 | // Execute the module function
> 773 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
      | ^  774 | 
  775 | // Flag the module as loaded
  776 | module.l = true;

(anonymous function)
./webpack/bootstrap:952

  949 | 
  950 | 
  951 | // Load entry module and return exports
> 952 | return hotCreateRequire(0)(__webpack_require__.s = 0);
      | ^  953 | 

(anonymous function)
http://localhost:8000/umi.js:956:10

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 12
  • Comments: 29

Most upvoted comments

https://github.com/moment/moment/issues/5486#issuecomment-622266107

如果用的是yarn,在package.json里添加这样一句, “resolutions”: { “moment”: “2.24.0” } 一开始没生效,我把dependencies里的moment固定成了2.24.0 再跑一遍yarn就好了,可以解决问题

https://github.com/moment/moment/issues/5472 https://github.com/moment/moment/issues/5481 看起来是moment最近升级的问题

Workaround: 降级moment

yarn add moment@2.24.0

npm uninstall moment npm install moment@2.24.0 npm start success!

This only solves the main app. How do you override moment installed for others?

As you can see below, the main app is 2.24.0. But others are still using 2.25.

$ yarn why moment 
yarn why v1.22.4
[1/4] Why do we have the module "moment"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "moment@2.24.0"
info Has been hoisted to "moment"
info This module exists because it's specified in "dependencies".
info Disk size without dependencies: "3.48MB"
info Disk size with unique dependencies: "3.48MB"
info Disk size with transitive dependencies: "3.48MB"
info Number of shared dependencies: 0
=> Found "@ant-design/pro-table#moment@2.25.0"
info This module exists because "@ant-design#pro-table" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
=> Found "antd#moment@2.25.0"
info This module exists because "antd" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
=> Found "@umijs/plugin-locale#moment@2.25.0"
info This module exists because "@umijs#preset-react#@umijs#plugin-locale" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
=> Found "rc-picker#moment@2.25.0"
info This module exists because "antd#rc-picker" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
Done in 1.06s.

yeah. i also have the problem.

我用的是idea :1.移除:yarn remove moment 2.增加:yarn add moment@2.4.0 3.检查yarn.lock 是否有2.25.1moment 如果有,手动将2.25.1跟换为2.24.0,跟换时版本对应地址也要跟换。在yarn一下 启动项目ok.

moment/moment#5486 (comment)

如果用的是yarn,在package.json里添加这样一句, “resolutions”: { “moment”: “2.24.0” } 一开始没生效,我把dependencies里的moment固定成了2.24.0 再跑一遍yarn就好了,可以解决问题

good! It solved my problem

npm uninstall moment npm install moment@2.24.0 npm start

success!

This only solves the main app. How do you override moment installed for others?

As you can see below, the main app is 2.24.0. But others are still using 2.25.

$ yarn why moment 
yarn why v1.22.4
[1/4] Why do we have the module "moment"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "moment@2.24.0"
info Has been hoisted to "moment"
info This module exists because it's specified in "dependencies".
info Disk size without dependencies: "3.48MB"
info Disk size with unique dependencies: "3.48MB"
info Disk size with transitive dependencies: "3.48MB"
info Number of shared dependencies: 0
=> Found "@ant-design/pro-table#moment@2.25.0"
info This module exists because "@ant-design#pro-table" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
=> Found "antd#moment@2.25.0"
info This module exists because "antd" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
=> Found "@umijs/plugin-locale#moment@2.25.0"
info This module exists because "@umijs#preset-react#@umijs#plugin-locale" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
=> Found "rc-picker#moment@2.25.0"
info This module exists because "antd#rc-picker" depends on it.
info Disk size without dependencies: "4.17MB"
info Disk size with unique dependencies: "4.17MB"
info Disk size with transitive dependencies: "4.17MB"
info Number of shared dependencies: 0
Done in 1.06s.

自动化构建工具jenkins 用这个方法没用。

Today: → antd@3.26.16 › moment@^2.24.0(2.25.0) (09:27:04) → umi@2.13.13 › umi-ui@1.5.6 › react-dev-utils@9.0.1 › browserslist@4.5.4 › electron-to-chromium@^1.3.122(1.3.426) (12:02:41) → @ant-design/pro-cli@1.0.20 › @umijs/fabric@2.0.8 › eslint-plugin-compat@3.5.1 › mdn-browser-compat-data@^1.0.3(1.0.19) (02:15:51)

antd@3.26.16 会默认装最新版 moment。