Moment: Erro Webpack: Não é possível encontrar o módulo "./locale" após atualizar para 2.19.0

Criado em 10 out. 2017  ·  149Comentários  ·  Fonte: moment/moment

Editar: Se você definir sua dependência para 2.18.1, tudo ficará bem.
Edição 2: Defina "moment": "2.18.1" em seu package.json
Editar 3: Acreditamos que isso seja corrigido.

Olá.
Usando criar-reagir-app. Depois de atualizar o momento para 2.19.0, tenho este erro no carregamento:

Erro: Não é possível encontrar o módulo "./locale"
-> 9 frames da pilha foram recolhidos.
./src/utils/Utils.js
src / utils / Utils.js: 1

1 importar momento de 'momento'

Comentários muito úteis

@patricksteenks : sim. Corrija assim em seu package.json "moment": "2.18.1"

Todos 149 comentários

Tenho o mesmo, confirmando esse erro.

mesmo aqui

Pode confirmar:

This relative module was not found:

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

OK, vamos analisar isso, mas não será muito rápido.

Alteramos o nome da função require, se alguém puder ver / investigar se ela está vinculada a:

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

Mesmo problema aqui. O downgrade resolveria o problema?

O mesmo aqui, quebrou vários aplicativos que trabalho.

@patricksteenks : sim. Corrija assim em seu package.json "moment": "2.18.1"

@ichernev ei, mas estou usando locale sem importar. Basta usar import moment from 'moment' e usar assim moment(date).locale('uk').format('ddd') . Pelo que entendi, você mudou a importação para locale . Como posso consertar isso no meu caso?

Mesmo problema no projeto construído com Angular-CLI

Confirmado.

As compilações do VueJS 2 Webpack também foram afetadas. A correção temporária é como GautierT sugeriu (downgrade momentjs)

package.json (problema com fuso horário no momento 2.19)

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

package.json (problema em geral)

    "moment": "2.18.1"

Posso confirmar que isso também está acontecendo!

Eu posso confirmar.
package.json

"moment": "2.18.1"

@renedx apenas esta linha o suficiente

O mesmo em um aplicativo Angular 4.
Acabei de fazer downgrade para 2.18.1 (número de versão estrito em package.json)

Também fui atingido por isso. Suspeito que seja o webpack fazendo mágica para reconhecer o "require" dinâmico e não pode mais reconhecê-lo com o novo nome e, portanto, as localidades nunca são agrupadas no pacote.

(Aliás, toda essa situação parece muito com exatamente para que servem as importações dinâmicas ES6. Podemos sonhar :-)

Eu uso no webpack desta página

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

Agora remova-o

E em exigir

const moment = require('moment');

Agora

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

Estritamente falando, acho que a conexão Angular é simplesmente porque a maioria dos projetos Angular usa Angular-CLI, que usa Webpack internamente. Mas pode estar relacionado a alguma configuração específica do Webpack nessa pilha.
No entanto, parece ser um problema de empacotamento bastante geral.

Arrependa-se, arrependa-se, o dia do juízo final está aqui!

Mesmo aqui.

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

O mesmo aqui - eu consertei com um recurso do yarn para sobrecarregar as configurações padrão de um pacote:

coloque isso em seu package.json principal (adapte "moment-timezone" ao nome do pacote que carrega o momento se você não carrega diretamente o momento):

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

assim como um asteróide de 10km ... o mesmo aqui ...

Qual é o ETA para correção?

Ok, é aqui que estamos:

  • Se você definir sua dependência para 2.18.1, tudo ficará bem.
  • Este é um problema com https://github.com/moment/moment/pull/4213
  • Envolvi o webpack e as equipes nativas de reação para falar sobre qual correção funcionará para todas as partes
  • Como definir a dependência para 2.18.1 fornece uma atenuação fácil, não desejo no momento reverter. Em vez disso, gostaria de aguardar o feedback do Webpack e do React Native para ver se podemos chegar a um acordo sobre o que fazer para levar esta situação adiante . Por esse motivo, não tenho um ETA para uma correção.
  • Um MCVE pode ser encontrado aqui: https://github.com/mj1856/moment-webpack-test

Erro confirmado ao executar o app react criado com a CLI create-react-app.

Resolvido este momento de degradação e a versão de fuso horário monent.

npm install [email protected] como uma correção temporária para que você não precise lidar com a atualização de package.json várias vezes. Isso provavelmente será corrigido em breve, então você pode fazer npm i .

@aheissenberger isso salvou minha vida, tive o mesmo problema com o rc-calendar, posso confirmar que funciona para o yarn 1.2.0.

Mesmo problema webpack 3.6.0 + moment 2.19.0. Funcionou bem com 2.18.1

Outros podem ter meu mesmo problema: Embora eu não tenha atualizado para 2.19.0, em meu package.json eu tinha ^2.18.1 . Eu mudei para 2.18.1 sem o ^ , e agora ele não instalará nada superior a 2.18.1 até que saibamos que 2.19.x é seguro

@ichernev parece muito provável que a renomeação de 'require' esteja causando essas quebras generalizadas. Suspeito que quando você precisa de módulos usando uma referência como essa, isso significa que o webpack não é capaz de detectar a importação, pois usa a análise estática AST para determinar as dependências.

Talvez você possa fornecer alguns detalhes sobre o problema do React Native que ele estava corrigindo, pois pode haver uma maneira melhor de contornar o problema original.

Em nosso projeto, estamos usando yarn 1.0.2 , create-react-app e esses recursos em package.json

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

Embora estejamos usando "moment": "2.18.1" , ainda estamos recebendo
screen shot 2017-10-10 at 3 53 43 pm

Existe uma solução alternativa para o problema de fios?

@ggsjyoon : Eu tive uma situação semelhante (ainda recebendo o erro) até que lembrei que você precisará atualizar um dos arquivos que o WebPack está observando para que ele seja regenerado e eliminado qualquer versão em cache.

+1

@ggsjyoon pode haver um requisito adicional de um de seus pacotes (por exemplo, fuso-horário do momento) - você pode usar minha dica https://github.com/moment/moment/issues/4216#issuecomment -335489518 para consertar isso com fios

Acabei superando isso mudando:

import * as moment from 'moment';

para:

import * as moment from 'moment/moment';

+1

@morrisonbrett Isso funciona. Obrigado

Confirmar a sugestão de @GautierT funciona para mim.

@maggiepint Vendo o que funcionou para @morrisonbrett , estou pensando que # 4213 pode não ser o problema. 2.19 introduziu outra mudança, o campo do módulo em package.json - isto é, anteriormente o webpack estava usando a versão transpilada.

Ativar o ES6 para o react native é o que causou a maioria dos problemas de bloqueio # 4187 e # 3904 (no branch de desenvolvimento apenas por um bom tempo) fez a mesma alteração para todos os usuários do webpack.

@tqc - provavelmente os dois. @thelarkinn já confirmou que o webpack não gostaria que a dinâmica exigisse.

Mesmo problema aqui, alguma atualização?

@maggiepint Sim, percebi logo depois de escrever aquele comentário que o bug no final do tópico não era exatamente o mesmo do início. O lado ES6 das coisas pode ser corrigido com algo como module.exports = require(‘moment’).default , mas não tenho certeza se isso ainda permitirá a agitação da árvore, e a harmonia do nó não gosta de misturar importação com requerer.

resolvido via webpack aliasing:

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

Alguém pode descobrir todos os bits do 2.19 que quebraram o webpack, propor um PR mínimo (baseado no 2.19.0), que reverta as partes "ruins", e consideraremos mesclá-lo para o 2.19.1.

Dizer "eu também" pela primeira vez não é muito útil.

A solução de @morrisonbrett funciona import * as moment from 'moment/moment';

Posso confirmar esse mesmo problema com o Angular-CLI v1.4.4. Fiquei inicialmente surpreso quando vi o erro envolvendo momentjs, já que meu projeto não o usa, mas após investigar rastreei sua injeção de volta ao WebPack.

Esta é minha mensagem de aviso quando eu construo:

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

Também tentei o método import * as moment from 'moment/moment'; , mas não tive sorte.

Ei @kud , @AleshaOleg - se você ainda está tentando importar locales:
em vez de:
import 'moment/locale/*
experimentar:
import 'moment/src/locale/*'

Tenho lutado com o mesmo problema por aqui ...
–––
@AleshaOleg : no seu caso de uso, acho que poderia ser:
import moment from 'moment'
import 'moment/src/locale/uk'
e depois chame moment(date).format('ddd')

Obrigado @dialnco !

Acabei lidando com este problema, ao atualizar para 2.19.0 , desabilitando completamente o código que tenta carregar locales.

({
  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
    }
  }
})

Em seguida, adicionei manualmente import 'moment/src/locale/ja' , import 'moment/src/locale/pt-br' e outros, conforme necessário para meu aplicativo, em vez de carregar todos os locais. Se você for criativo, pode usar import() s dinâmicos em vez de carregar apenas o idioma de que seu aplicativo precisa.

É muito importante que, se você fizer isso, não faça import 'moment/locale/foo' , mas sim import 'moment/src/locale/foo' . Por causa de como os arquivos de localidade tentam se referir ao próprio moment , eles irão agrupar uma segunda cópia de moment (desta vez, a construção UMD em oposição à construção ESM) e que irá, em por sua vez, carregue todos os locais novamente.

Espero que isso ajude alguém (opções 1 e 2 do comentário acima, graças a @patsissons ):
-Se você não tiver nenhum módulo que carregue moment.js, mas seu aplicativo sim, basta mover para uma versão mais antiga
-Se você tiver quaisquer módulos que também tenham moment.js nas dependências, o acima não irá ajudá-lo, você terá que modificar a configuração do seu webpack:
{...
resolver: {
...
alias: {
'momento $': 'momento / momento',
}
}
}

-Mas se você estiver usando react-create-app (como eu) e você precisa ter o build funcional o mais rápido possível, a única opção para você executar 'npm eject', desta forma você terá acesso à configuração do webpack e segundo opção estará disponível para você.

Desculpe, mas o único método que funcionou aqui foi o de @patsissons . https://github.com/moment/moment/issues/4216#issuecomment -335637520

Ainda

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

mas adicionando no webpack

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

Por algum motivo, o yarn ignorou minha configuração de "resoluções" do package.json.
Uma maneira rápida de consertar, se você estiver usando o fuso horário do momento, é editar o 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"

Esperamos a correção 2.19.1 ....

Alguém poderia descrever qual é o problema real aqui? É simplesmente porque o webpack não identifica o alias require ()?

@TomMettam 2.19.0 apontou o webpack para o código es6 em moment / src / moment, que não exporta exatamente a mesma interface que moment / moment.

Além disso, o alias requer evita que o webpack empacote todos os arquivos que poderiam ser solicitados dinamicamente. Importar os arquivos de localidade manualmente funcionaria, exceto que a escolha óbvia de importar de momento / local irá carregá-los em uma instância de momento diferente daquela que você está realmente usando.

E se isso for muito simples, há diferenças no comportamento de diferentes versões de yarn / npm - estou usando uma versão de npm que usa qualquer instância do pacote que está na pasta node_modules do aplicativo raiz, mas outras versões fazem é mais difícil substituir o packag usado.

Quem decidiu que alterar a assinatura de exportação em uma versão secundária é uma boa ideia?

Observe que isso também quebra as bibliotecas de terceiros que dependem do momento

+1

Não é aceitável para um pequeno upgrade.

Eu entendo a ideia por trás, mas por favor, seja mais rígido com relação ao semver.

@darkalor não foi intencional - a assinatura de exportação em questão só é materialmente diferente em um conjunto limitado de circunstâncias - o tipo de coisa que parece funcionar bem até ser exposta a um grande número de usuários.

@darkalor @kud - Regressões acontecem. Por favor, tente ser construtivo; todos estão cientes de que isso não deveria ter acontecido e reclamar não ajuda ninguém.

@TomMettam Sim, acontece, mas quando acontecer, você pode lidar com isso e, por lidar, quero dizer que você pode atualizá-lo como principal, não secundário. Isso é tudo. Não culpo ninguém, culpo a situação de que se alguém pensa "ah ok, posso fazer um upgrade, pois é só um detalhe menor", está um tanto errado neste caso. ;)

Agradeço todo o trabalho feito na hora, mas só falo da situação instável.

Eu não ofendo ninguém, desculpe.

@kud não quando você precisa escolher o número da versão antes de saber que a regressão existe. O nível de complexidade necessário para suportar o número de ambientes que o momento oferece é algo bastante impressionante.

@tqc, mas agora você sabe disso, é isso. Como dito anteriormente por @TomMettam , isso acontece.

É possível remover e / ou adicionar tags.

De qualquer forma, não vou mais enviar spam aqui, obrigado pela solução alternativa; Eu adicionei uma nota para outras pessoas que não estão acompanhando esse problema, no changelog: https://gist.github.com/ichernev/5f3f4eb02761b4f765a0cccf02cec603#gistcomment -2226628

Tenha um ótimo dia. :)

Estou usando o yarn como meu gerenciador de pacotes. Por algum motivo, meu arquivo yarn.lock não estava atualizando para refletir a alteração que fiz em meu arquivo package.json. minhas configurações como @daniesy disse. O problema era o fuso horário no meu arquivo yarn.lock ainda dependendo da versão do momento '^ 2.18.1'.

Para corrigir isso, executei uma limpeza do cache de fios :
yarn cache clean

Então :
yarn install

Esperançosamente, isso deve gerar novamente seu arquivo

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

De qualquer forma, verifique se o seu bloqueio de fio não está tentando incluir uma versão de momento maior que 2.18.1 em nenhum módulo, especialmente fuso-horário e momento.

Acho que temos uma solução: https://github.com/moment/moment/pull/4232

Melhor parte - acho que isso funcionará tanto para webpack quanto para o react nativo - sem tristeza!
Já testei no webpack, mas alguém usaria o teste nativo reage? Observe que você precisará executar o grunt release para obter os arquivos compilados antes de testar usando uma ligação npm.

@maggiepint - Alguma possibilidade disso funcionar para o Angular-CLI também?

2.19.1 foi lançado, experimente

Funciona para mim com Webkit.

Obrigado @ichernev e todos os envolvidos!

@ichernev : 2.19.1 está funcionando para mim.
React 16.
criar-reagir-app.
Não ejetado

Momento carregado assim:

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

Obrigado pela correção. 👍

Acabei de disparar outro build do VSTS usando angular-cli / webpack e reimplantar no ambiente

Tudo voltou ao normal

Obrigado

Eu também posso confirmar que o problema foi resolvido para o Angular-CLI v1.4.4. Obrigada!

funciona com typescript / webpack / karma / phantomjs. Obrigado pela correção!

Para fazer funcionar, apenas incluí o arquivo de localidade antes do momento.
import 'moment/locale/de'; import moment from 'moment';
e mais tarde fez
moment.locale("de");

parece ainda existir na "versão": "2.22.2"?

Também estou usando o 2.22.2. o problema ainda existe

Estou usando o 2.22.2 e vendo o mesmo problema.

Como acima. Mesmo problema, mesma versão.

Usando o react nativo e vendo este erro para uma versão de lançamento:

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 funciona

não está trabalhando para mim ainda

eu também não consigo fazer o 2.18.1 funcionar para mim

2.22.1 ftw lol

Também notei uma regressão na v2.22.2. Reverter para 2.22.1 corrigiu para mim.

Olá a todos,

Tive o mesmo problema (usando Webpack no Laravel). Isso não é ideal, mas uma solução rápida que funcionou para mim é copiar a pasta "locale" do repositório junto com o arquivo moment.js ou moment-with-locale.js.

Também encontrando isso em v2.22.2 .

Para fazer funcionar, apenas incluí o arquivo de localidade antes do momento.
import 'moment/locale/de'; import moment from 'moment';
e mais tarde fez
moment.locale("de");

@ mj1856 é apropriado reabrir este problema ou devemos criar um novo / novo? Eu também estou vendo isso de novo. Reverter para 2.22.1 não corrigiu no meu caso e eu tive que usar a correção @patsissons para deixar o webpack feliz novamente.

mesmo

Usei allowSyntheticDefaultImports conforme explicado no documento aqui: https://momentjs.com/docs/#/use -it / typescript / e resolveu o erro Cannot find module "./locale" para mim. Observe que // @ts-ignore acima da importação também era necessário em meu IDE.

mesma pergunta , moment:'2.18.1'

Isso ainda é recomendado: import moment from "moment/min/moment-with-locales"; ?

b / c acabo com o mesmo (?) erro com [email protected] e CRA:

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

Para todos os transeuntes da Internet, aqui está uma maneira de consertar se você construir com rollup:

Supondo que você esteja usando 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/**",
        }),
    ]
}

moment tem uma entrada package.json para jsnext:main que podemos aproveitar aqui. para incluir as localidades para nós durante o processo de construção. O tamanho do seu pacote aumentará, mas evitará os erros do console 😅

Tenho o mesmo problema com a versão 2.24.0 do momento em meu aplicativo React. Acho que esse problema ainda não foi resolvido.

Tenho o mesmo problema com a versão 2.24.0 do momento em meu aplicativo React. Acho que esse problema ainda não foi resolvido.

A confirmar. "momento": "2.24.0". 2.18.1 não está resolvendo o problema. Node v12.16.0

O mesmo aqui, com 2.24.0 para meu projeto Preact.

Ainda com esse problema, por favor me ajude !!

Para mim, quebrado: "momento": "^ 2.24.0" (resolvendo para 2.25.0)
Não quebrado: "momento": "2.24.0"

se você usar o yarn, adicione o bloco de resoluções para substituir as versões da subdependência:

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

Use "moment": "2.24.0" e, conforme sugerido por @lilyu , use a resolução. Funcionou para mim.

Reverter para "2.24.0" e remover o "^" funcionou para mim. Parece que a última versão deles foi lançada ontem à noite e está jogando fora.

Enfrentando um problema com "moment": "^2.24.0", .
Uncaught Error: Cannot find module './locale' at

O mesmo problema. Resolvido com a solução @enewhuis . Obrigado!

O mesmo problema. Resolvido com a solução @enewhuis . Obrigado cara.

Resolvido o problema com a solução @enewhuis e @likeu. Obrigado.

O mesmo problema. solução @enewhuis para o resgate

Para mim, quebrado: "momento": "^ 2.24.0" (resolvendo para 2.25.0)
Não quebrado: "momento": "2.24.0"

Obrigado cara, estou lutando com isso o dia todo

Mesmo erro e mesma correção aqui. Eu estava usando o fuso horário do momento.

Antes de:

    "moment-timezone": "^0.5.28",

Depois de:

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

Mesmo erro e mesma correção aqui. Eu estava usando o fuso horário do momento.

Antes de:

    "moment-timezone": "^0.5.28",

Depois de:

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

Não trabalhando para mim com -

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

A correção acima não funciona para mim. Node v12.6.0, yarn v1.22.4, react-scripts-ts

Trabalhou para nós com

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

e

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

usando fio

Não funcionou sem o bloco de resoluções.

Sim, posso confirmar que adicionar o bloco resolutions funcionou para mim. Não tenho ideia do porquê, entretanto ...

Obrigado @mtogstad !

A solução

Não entendo como esse erro pode aparecer aleatoriamente e destruir meu aplicativo de reação

@bodyfarmer, você pode escrever etapas sobre como resolver isso?
Estou enfrentando o mesmo problema com o app react.

@hasanmehmood No meu caso foi suficiente fazer um downgrade das dependências de momento desta forma no CMD:

npm install [email protected]

Espero que isto funcione para você também.

Ola pessoal!
Eu enfrentei o mesmo problema nas últimas horas e finalmente resolvi isso mudando a versão do momento.

Nos comentários acima, vi a solução final.

Razão:
_moment lançar a nova versão 17 horas atrás de 2.24.0 a 2.25.0_

Solução:
Etapa 1: alterar as versões

  • "momento": "2.24.0",
  • "fuso horário de momento": "^ 0.5,28",

Etapa 2: se você estiver usando yarn, adicione resoluções em seu arquivo package.json como esta
"dependências" {
"momento": "2.24.0",
"fuso horário do momento": "^ 0,5,28"
},
"resoluções": {
"momento": "2.24.0"
},

Obrigado.

Obrigado, @jolalla , primeiro tentei fazer o downgrade da versão, mas não funcionou para mim. Finalmente adicionar o bloco de resoluções mostrou alguma magia :)

Para outras pessoas que estão enfrentando um problema semelhante com seu aplicativo de reação. Eles podem executar as 2 etapas a seguir para resolvê-lo.

Nas dependências, substitua
"moment": "^2.24.0",
com
"moment": "2.24.0",

E adicione o bloco de resoluções em package.json

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

Por que este problema foi encerrado!?! ??!?

Bom momento para mudar para luxon, que é o que fiz para um projeto que tinha pouco uso de momento.

Tendo o mesmo problema
"resoluções": {
"momento": "2.24.0"
}
resolver meu problema.
Obrigado.

Posso tentar mais alguma coisa? "moment": "2.24.0" , e
"resolutions": { "moment": "2.24.0" }
não estão consertando para mim. Isso é para uma implantação do Heroku. Todas as idéias são apreciadas.

Se por acaso alguém mais tiver um monorepo (e / ou estiver usando espaços de trabalho em package.json), a correção de 'resoluções' para usar o momento anterior versão 2.24.0 só funcionará se aplicada no nível de raiz package.json. Em nosso caso, tivemos que fazer o seguinte:
{“Resoluções”: {“** / momento”: “2.24.0”}}.

Espero que a versão 2.25 do momento seja corrigida adequadamente o mais rápido possível!

se você usar o yarn, adicione o bloco de resoluções para substituir as versões da subdependência:

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

Estou lidando com isso há uma hora. remover ^ ajuda.

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

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

Obrigado, @jolalla , primeiro tentei fazer o downgrade da versão, mas não funcionou para mim. Finalmente adicionar o bloco de resoluções mostrou alguma magia :)

Para outras pessoas que estão enfrentando um problema semelhante com seu aplicativo de reação. Eles podem executar as 2 etapas a seguir para resolvê-lo.

Nas dependências, substitua
"moment": "^2.24.0",
com
"moment": "2.24.0",

E adicione o bloco de resoluções em package.json

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

Funciona para mim. Obrigado

@hasanmehmood funcionou para mim, obrigado cara

Obrigado, @jolalla , primeiro tentei fazer o downgrade da versão, mas não funcionou para mim. Finalmente adicionar o bloco de resoluções mostrou alguma magia :)

Para outras pessoas que estão enfrentando um problema semelhante com seu aplicativo de reação. Eles podem executar as 2 etapas a seguir para resolvê-lo.

Nas dependências, substitua
"moment": "^2.24.0",
com
"moment": "2.24.0",

E adicione o bloco de resoluções em package.json

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

Funciona para mim também! Obrigada!! : D

Tenho feito isso por horas no meu aplicativo angular 8 com npm.

  1. Eu atualizei do momento 2.17 para 2.24
  2. Eu adicionei as resoluções conforme recomendado acima - "devDependencies": {...},"resolutions": { "moment": "2.24.0" } para package.json
  3. Alterado para fio ao fazer o seguinte. rm -rf node_modules package-lock.json && yarn
    Muito obrigado pessoal

Estou muito desesperado ... Estou usando o momento 2.25.1 e alterando as "devDependencies": {...}, "resoluções": {"moment": "2.25.1"} como acima ... não trabalhando

estou usando o npm. Eu sou um novato em reagir onde está devDependencies?
eu mudei isso, mas ainda não está funcionando
Capture

Estou usando a versão "2.25.1" e ainda está acontecendo!

@ m4mariaoni - isso é porque você instalou sem --save-dev , então você está mudando a parte certa.

Se você ainda estiver encontrando esse problema após bloquear o momento para 2.24.0, elimine a pasta de momento de node_modules e reinstale seus pacotes com npm install --save

Obrigado, @jolalla , primeiro tentei fazer o downgrade da versão, mas não funcionou para mim. Finalmente adicionar o bloco de resoluções mostrou alguma magia :)

Para outras pessoas que estão enfrentando um problema semelhante com seu aplicativo de reação. Eles podem executar as 2 etapas a seguir para resolvê-lo.

Nas dependências, substitua
"momento": "^ 2.24.0",
com
"momento": "2.24.0",

E adicione o bloco de resoluções em package.json

"resoluções": {
"momento": "2.24.0"
}

Funciona para mim também! Obrigada!! : D! pensa!

Obrigado, @jolalla , primeiro tentei fazer o downgrade da versão, mas não funcionou para mim. Finalmente adicionar o bloco de resoluções mostrou alguma magia :)

Para outras pessoas que estão enfrentando um problema semelhante com seu aplicativo de reação. Eles podem executar as 2 etapas a seguir para resolvê-lo.

Nas dependências, substitua
"moment": "^2.24.0",
com
"moment": "2.24.0",

E adicione o bloco de resoluções em package.json

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

Substituindo

"moment": "^2.24.0",

com

"moment": "2.24.0",

funciona para mim! O de costume,
rm -rf package-lock.json && node_modules

Apesar de fazer todas as medidas acima, ainda não está funcionando ...

Isso é frustrante

Repositórios criados anteriormente foram usados ​​no momento 2.24.0 com React, e ainda está funcionando, mas instale o momento2.24.0 agora, não está funcionando .... (Eu tentei todas as medidas acima também)

Qual é a causa?

Eu imagino que você possa ter um ^ 2.24.0 em vez de 2.24.0 em algum lugar em um package.json @ wlsdud2194?

Não sei, e ainda assim o erro continua vindo. É estranho

a versão do momento é 2.24.0 em um package.json ao invés de ^2.24.0 desde que o instalei.

Eu segui esse processo, uma das medidas acima

  1. adicionar bloco de resoluções
  2. remova o diretório node_modules e reinstale o pacote do yarn.

funciona para mim, mas não sei porque trabalhar ... 😂

Obrigado pelo seu interesse :) @agrohs

Tive que fazer downgrade de ^2.25.1 para 2.24.0 para corrigir o problema

Não sei, e ainda assim o erro continua vindo. É estranho

Tente executar npm ls moment para ver se algum outro módulo também usa o momento

E adicione o bloco de resoluções em package.json
"resoluções": {"momento": "2.24.0"}

remova o diretório node_modules e reinstale o pacote do yarn.

rm -rf package-lock.json && node_modules

Contato: Sr. Liu Tel: 18908205973
Fax: 028-86676917
E-mail: [email protected]
Nome da empresa: Chengdu Shouzhi Technology Co., Ltd. Site da empresa: www.szdma.com
Endereço: Yinhai Building, No. 162, Binjiang East Road, Chengdu


Chengdu Shouzhi Technology Co., Ltd. foi fundada em 2010. É uma empresa profissional de desenvolvimento de personalização de software para pequenas e médias empresas em Chengdu. A empresa atende principalmente a pequenas e médias empresas. Fornece construção de rede local, website construção, soluções de customização de software, etc., e fornece serviços manuais Um conjunto completo de serviços para o negócio de informática. A empresa adere ao princípio de "integridade e orientação para o serviço" para destacar a imagem da empresa; através de nossos esforços incessantes, oferecemos aos clientes serviços de alta qualidade.

Estamos recebendo Webpack Error: Cannot find module "./locale" erro. Estamos usando o pacote 'react-redux-i18n' em nosso projeto, que depende do 'react-i18nify' e que, por sua vez, depende do 'momento'. Internamente, o 'momento' é configurado para usar a versão mais recente que está causando este erro.

npm

Nas dependências
"reagir": "^ 16.8.1",
"momento": "2.24.0",
"fuso horário de momento": "^ 0.5,28",
"react-moment-proptypes": "^ 1.5.0",
"react-redux-i18n": "^ 1.9.3",
"react-redux": "^ 6.0.0",

Qualquer ajuda seria muito apreciada.

O patch 2.25.3 mais recente parece ter corrigido isso, atualize a versão momentjs para: "moment": "^2.25.3" em package.json
Remova a pasta node_modules e execute yarn install ou npm install para fazer isso.

Para aqueles que perderam um pouco de confiança no momento e não querem que seus aplicativos rompam completamente com esse problema que acontecerá novamente no futuro - mudei uma base de código de tamanho médio para luxon sem muitos problemas.

Obrigado pessoal ...

Mudei a versão para 24.0 e adicionei as "resoluções": {"moment": "2.24.0"} e executei npm install

Então pareceu funcionar de novo (trabalhando com o React, a propósito).

Felicidades!

O patch 2.25.3 mais recente parece ter corrigido isso, atualize a versão momentjs para: "moment": "^2.25.3" em package.json
Remova a pasta node_modules e execute yarn install ou npm install para fazer isso.

Obrigado @jasontll , funciona para mim

Nenhuma dessas soluções funcionou para mim hoje.

Tenho feito isso por horas no meu aplicativo de reação
com 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

também funcionou para vocês, muito obrigado :-)

Eu corro também neste problema. Eu consertei com a versão mais recente a partir de "moment": "^2.26.0"

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

Questões relacionadas

M-Zuber picture M-Zuber  ·  3Comentários

dogukankotan picture dogukankotan  ·  3Comentários

alvarotrigo picture alvarotrigo  ·  3Comentários

Shoroh picture Shoroh  ·  3Comentários

nikocraft picture nikocraft  ·  3Comentários