Moment: Erro não detectado: não é possível encontrar o módulo './locale'

Criado em 1 mai. 2020  ·  69Comentários  ·  Fonte: moment/moment

Descreva o bug
Recebo este erro no console do Chrome depois de criar a versão otimizada para produção

Erro não detectado: não é possível encontrar o módulo './locale'
em 2.d0944550.chunk.js: 1
no Módulo.(2.d0944550.chunk.js: 1)
em f ((índice): 1)
em Module.837 (main.091f08fc.chunk.js: 1)
em f ((índice): 1)
em Object.540 (main.091f08fc.chunk.js: 1)
em f ((índice): 1)
em a ((índice): 1)
em Array.e [como push] ((índice): 1)
em main.091f08fc.chunk.js: 1

Este é meu 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"
  }

Se eu construir localmente com yarn para a versão dev, funciona

Reproduzir
Passos para reproduzir o comportamento:
Crie um aplicativo com esses requisitos. Deve obter esse erro no console.

Comportamento esperado
Uma descrição clara e concisa do que você esperava que acontecesse.

Capturas de tela
Se aplicável, adicione capturas de tela para ajudar a explicar seu problema.

Desktop (preencha as seguintes informações):

  • SO: [por exemplo, iOS]
  • Navegador [por exemplo, cromo, safari]
  • Versão [por exemplo, 22]

Smartphone (preencha as seguintes informações):

  • Dispositivo: [por exemplo, iPhone6]
  • SO: [por exemplo, iOS8.1]
  • Navegador [por exemplo, navegador de ações, safari]
  • Versão [por exemplo, 22]

Ambiente específico do momento

  • A configuração de fuso horário da máquina em que o código está sendo executado
  • A hora e data em que o código foi executado
  • Outras bibliotecas em uso (TypeScript, Immutable.js, etc)

Execute o seguinte código em seu ambiente e inclua a saída:

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

Contexto adicional
Adicione qualquer outro contexto sobre o problema aqui.

Comentários muito úteis

O mesmo problema,

Corrigido removendo o sinal de carrete antes do número da versão. A entrada Package.json agora se parece com:
"momento": "2.24.0"

Parece um bug da nova versão.

Todos 69 comentários

Exatamente. Acabei de enfrentar esse erro e vi que eles lançaram uma nova versão horas atrás.

se você usar o yarn, adicione o bloco de resoluções ao package.json para substituir as versões da subdependência, funciona para mim

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

Mesmo aqui!

Além disso, 2.24.0 ainda tem o aviso: ./node_modules/chart.js/node_modules/moment/src/lib/locale/locales.js Critical dependency: the request of a dependency is an expression

Basta reproduzir este problema

O mesmo!

  • 1

O mesmo problema,

Corrigido removendo o sinal de carrete antes do número da versão. A entrada Package.json agora se parece com:
"momento": "2.24.0"

Parece um bug da nova versão.

Esta noite eu instalei o Jest e ele criou um problema e fui instruído a remover todos os arquivos yarn.lock e package.lock junto com minha pasta de módulos e instalar o yarn ou npm install. Quando instalei o yarn, recebi o erro mencionado neste tópico - a página que apareceu dizia que o erro era um erro de webpack e apontava para moment-timezone. Quando removi meus arquivos de bloqueio, pasta de módulo e reinstalei usando npm install (em vez de instalação do yarn) - tudo funcionou. Resumindo, quando usei um comando de gerenciador de pacotes diferente, ele mudou o resultado.

Por favor, remova ^ em package.json desta forma funcionou para mim 👍

estranho tal incidente aconteceu no início desta semana devido à biblioteca prometida, também há um problema como ^ precisa ser removido. Eu acredito que as pessoas agora farão mais ou menos para toda a versão estrita package.json em vez de ^

Tentei remover o acento circunflexo de package.json e executar + rm -rf node_modules + yarn e ainda recebo este problema ao executar o webpack

Estou usando o fuso horário de momento e o padrão é 2,25. remover acento circunflexo não faz diferença

Mesmo aqui!

Isso funciona para mim, estou usando criar-reagir-app.
// em 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/)
...
]

Parece que há um problema com a versão mais recente. Tive que reverter para "2.24.0" sem o "^" e isso permitiu que meus sites fossem compilados.

O mesmo problema aqui com a versão do momento 2.25.0 em um dos meus projetos baseados em gatsby:

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

Com o momento 2.24.0 , esse problema não existe.

Alguém pode fornecer um exemplo mínimo (não) funcional para que isso possa ser investigado?

Tive que reverter para "2.24.0", momento não consigo encontrar './locale'

isso funciona perfeitamente para mim: https://github.com/moment/moment/issues/4216#issuecomment -622453248

Alguém pode fornecer um exemplo mínimo (não) funcional para que isso possa ser investigado?

Ei @ichernev - encontre em anexo. Basta executar npm install e npm start :)

issue5484.zip

O tratamento de require foi revertido para o comportamento 2.24.0.

Corrigido em 2.25.1.

Eu atualizei para a versão 2.25.1 , mas ainda recebo o erro.

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

Mas talvez eu esteja fazendo algo errado. Alguém pode confirmar que esse erro desapareceu em 2.25.1?

O mesmo problema para mim e fuso horário. Eu tentei forçar 2.24.0, mas continua com o mesmo problema, já que estou supondo que o fuso horário de momento usa o mais recente?

Ainda recebendo o erro

@ odd1120 is [email protected]?
Se você usa yarn, tente yarn why moment para mostrar os dep. Instalados.

@ichernev Desculpe, posso confirmar que 2.25.1 apresenta o mesmo erro. Usando o aplicativo que carreguei anteriormente e um node_modules / package-lock.json limpo, posso ver que a versão é 2.25.1, mas ainda joga.

Por que esses problemas foram encerrados ... isso está causando estragos

Sim eu também. Eu pensei que fosse o meu Docker

Sugestão removida - não vale a pena em 2020 :( @ichernev alguma atualização ainda?

Para pessoas que usam o app create-react-app e não querem ejetar o CRA, você pode instalar:

Em seguida, crie um config-overrides.js no diretório raiz do seu projeto para posterior substituição.

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

Edite seu package.json:

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

Como eu uso o design de formigas, meu config-overrides.js parece com isto:

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

Mas o seu vai ser mais simples, algo assim eu acho:

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;
};

Para as pessoas que têm acesso ao Webpack, você pode adicionar a seguinte entrada à matriz do plug-in na configuração do 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",
      });
    })

Até que a correção seja lançada, como foi mencionado por @saadzr , você pode temporariamente atribuir um momento à versão "2.24.0". Remova o carret: "^".

Para quem não sabe fazer. Encontre os pacotes que usam o momento: npm ls moment . Você provavelmente verá:

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

Portanto, dentro de antd/package.json e rc-picker/package.json em dependencies :

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

E execute npm i DUAS VEZES. Não sei por que preciso duas vezes, mas só funciona depois de duas vezes.

@ talgat-ruby Isso implica editar a pasta node_modules que não é enviada para os repositórios, as pessoas que clonam o projeto terão que fazer todas as vezes, esta não é uma boa solução, eu acho.
Por exemplo, trabalhamos com vários colaboradores e não podemos dizer a eles para fazerem cada vez que clonarem um repositório.
A melhor maneira de consertar isso até que uma correção seja lançada é configurar o Webpack conforme mencionado acima.

@nathanagez esta é uma solução temporária. A equipe Antd provavelmente lançará uma correção oficial em breve. E sim, você está certo, você não pode confiar nisso.

@ talgat-ruby eu expliquei como configurar o Webpack, veja acima, para que você possa enviar a solução alternativa em seu repositório.

posso confirmar que a sugestão de @ talgat-ruby resolveu o problema para mim.

@llyu Sua sugestão funcionou para mim!

Estou usando o fuso horário de momento e não especifiquei uma versão por enquanto.
Parece então que, durante a instalação, o yearn instala a última versão do moment como uma dependência -> [email protected] e não é compatível.

Certamente adicionando
"resoluções": {"momento": "2.24.0"}
resolve o problema.

muito obrigado

Alguma notícia dos desenvolvedores?

Obtendo este erro usando MaterialUI DatePicker. Tentei reverter manualmente para 2.24.0, mas não tive sorte. Espero ver isso resolvido em breve. Acho que vou usar o TextField nativo type = "date" por enquanto.

O mesmo problema,

Corrigido removendo o sinal de carrete antes do número da versão. A entrada Package.json agora se parece com:
"momento": "2.24.0"

Parece um bug da nova versão.

Isso funciona para mim! Tnx

Estou tendo o mesmo problema, excluí a pasta node_modules, alterei a versão do momento para 2.24.0 e instalei novamente, o problema persiste.
Quando eu verifico rc-calendar está usando 2.25.1 algo assim. Tentei editar lá para yarn install problema ainda persiste. Por favor me ajude, estou trabalhando em um projeto importante

@faizhameed Tente remover a pasta node-modules.
Remova seu package-lock.json também (yarn.lock também se estiver usando yarn).

Adicione isso ao seu package.json após as dependências: {
...
},
resoluções: {"momento": "2.24.0"}

Deve forçar rc-datepicker a usar o momento 2.24

O mesmo problema aqui após a atualização para 2.25.0 e 2.25.1.
A única solução que funcionou para mim foi fazer o downgrade para 2.24.0

Infelizmente eu tenho o mesmo problema. Por algum motivo, a solução no package.json não está funcionando para mim.
resolutions: { "moment": "2.24.0" }

Por enquanto, vou fazer downgrade como @pcarballeda

Para mim, corrigir a versão para "moment": "2.24.0" e adicionar resolutions: { "moment": "2.24.0" } resolveu temporariamente o problema.

Módulo não encontrado: Erro: Não é possível resolver './locale' em 'D: \ Downloads \ Telegram \ ildamnode_modules \ rc-pickernode_modules \ momentrc \ lib \ locale'

Como isso pode ser superado?

"momento": "2.24.0"

"dependências": {
"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",
"momento": "2.24.0",
"nprogress": "^ 0.2.0",
"path-to-regexp": "^ 6.1.0",
"prop-types": "^ 15.7.2",
"string de consulta": "^ 6.12.1",
"react": "^ 16.13.1",
"react-currency-format": "^ 1.0.0",
"react-custom-scrollbars": "^ 4.2.1",
"react-dom": "^ 16.13.1",
"react-capacete": "^ 6.0.0",
"react-perfect-scrollbar": "^ 1.5.8",
"svg-sprite-loader": "^ 4.2.1",
"umi-plugin-locale": "^ 2.11.5"
},

O downgrade para 2.24.0 funcionou para mim. Remova o ^ com 2.24.0.
Também atualizou manualmente todas as dependências momentâneas para 2.24.0 no pacote-lock.json.

Tendo problema com o 2.24, tentando colocar as "resoluções" ... mas não atualizei para o 2.25, o que há de errado? Estava funcionando na quinta-feira.

O downgrade para 2.24.0 funcionou para mim. Remova o ^ com 2.24.0.
Também atualizou manualmente todas as dependências momentâneas para 2.24.0 no pacote-lock.json.

Obrigado funcionou! Há um problema com o Yarn. Trabalhou com Npm

Até que a correção seja lançada, como foi mencionado por @saadzr , você pode temporariamente atribuir um momento à versão "2.24.0". Remova o carret: "^".

Para quem não sabe fazer. Encontre os pacotes que usam o momento: npm ls moment . Você provavelmente verá:

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

Portanto, dentro de antd/package.json e rc-picker/package.json em dependencies :

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

E execute npm i DUAS VEZES. Não sei por que preciso duas vezes, mas só funciona depois de duas vezes.

Trabalhando! <3

yarn remove + yarn add moment versão 2.25.2 instalada que funciona bem para mim

yarn remove + yarn add moment versão 2.25.2 instalada que funciona bem para mim

Isso não seria um problema nesta versão?

@ Shakxzod-Namazbaev Acho que o problema original era com a versão 2.25.0, algumas pessoas relataram que o mesmo problema acontece na 2.25.1, outros mencionaram que o downgrade para 2.24 funciona para eles. No meu caso, a versão 2.25.2 parece funcionar, então talvez o downgrade não seja necessário

@ Shakxzod-Namazbaev Acho que o problema original era com a versão 2.25.0, algumas pessoas relataram que o mesmo problema acontece na 2.25.1, outros mencionaram que o downgrade para 2.24 funciona para eles. No meu caso, a versão 2.25.2 parece funcionar, então talvez o downgrade não seja necessário

Então você não tem problemas com a versão 2.25.2 agora, certo?

@ Shakxzod-Namazbaev exatamente, 2.25.2 funciona bem para mim.

Posso confirmar - o momento 2.25.2 também funciona para mim.

Acho que 2.25.2 está OK na forma autônoma, mas na forma gerenciada por pacote, ainda está quebrado (webpack no meu caso onde o momento é uma dependência do fuso-horário do momento).

2.24.0 ainda é o único para pessoas que usam webpack e outros pacotes dependentes do momento.

ver. 2.25.2 funciona para mim na forma gerenciada por pacote - webpack configurado em um projeto baseado em gatsby (versão 2.25.0 não funcionava):

linhas package.json relevantes:

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

Não estou usando moment-timezone embora.

Tão louco que este relatório de problema ainda está parado com tantas pessoas afetadas e a única "solução" até agora é fazer o downgrade para uma versão antiga!?!?!

@ichernev Obrigado! Atualizar para 2.25.2 corrige esse problema para mim!

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

OK. Elogiei muito cedo. Embora com o momento ver. 2.25.2 webpack é capaz de produzir um bundle funcional sem erros, mas importar locale não funciona mais - parece que está sendo ignorado (talvez isso tenha algo a ver com sideEffects / tree shake ?).

Por exemplo:

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"))

Com a versão 2.25.2 saída é 04 May 2020 16:38:15 , o que está incorreto, como deveria ser
04 maja 2020 16:38:58 .

Portanto, a versão 2.24.0 ainda é a última que funciona.

Eu enfrentei o mesmo problema, remover cenoura da versão consertou isso.

Assim no seu arquivo package.json --- "momento": "2.24.0"

Versão: 2.24.0

Bem, eu estava testando localmente e não consigo dizer por quê, mas se for uma propriedade package.json module então ela está danificada. Se houver apenas jsnext:main ele está funcionando. Isso está relacionado a arquivos de localidade que não estão sendo carregados corretamente, embora ainda estejam incluídos no pacote.

Portanto, essa propriedade de módulo "moderno" que substitui jsnext: main não é apenas um renomear ou um nome alternativo. Tem alguma agenda oculta que não é bem divulgada.

2.25.3 foi eliminado sem module .

@ichernev - obrigado! Posso confirmar que a versão 2.25.3 funciona (o webpack é capaz de produzir o pacote sem erros e incluindo / definindo o local funciona conforme o esperado).

Correções em 2.25.3 para mim.

O mesmo problema,

Corrigido removendo o sinal de carrete antes do número da versão. A entrada Package.json agora se parece com:
"momento": "2.24.0"

Parece um bug da nova versão.

Depois disso funciona!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

danieljsinclair picture danieljsinclair  ·  3Comentários

ninigix picture ninigix  ·  3Comentários

BCup picture BCup  ·  3Comentários

IbraheemAlSaady picture IbraheemAlSaady  ·  3Comentários

alvarotrigo picture alvarotrigo  ·  3Comentários