<p>momento com locales: "./locale" não encontrado</p>

Criado em 22 fev. 2016  ·  48Comentários  ·  Fonte: moment/moment

Estou recebendo este aviso ao usar o webpack:

WARNING in ./~/moment/min/moment-with-locales.js
Module not found: Error: Cannot resolve 'file' or 'directory' ./locale in \node_modules\moment\min
@ ./~/moment/min/moment-with-locales.js 271:16-43

alguma pista?

Discussion Documentation Help Wanted

Comentários muito úteis

Usei o módulo ignore com bons resultados. Isso pode ajudar alguém:

    // /app/js/webpack.config.js
    plugins: [

        // Fixes warning in moment-with-locales.min.js 
        //   Module not found: Error: Can't resolve './locale' in ...
        new webpack.IgnorePlugin(/\.\/locale$/)
    ]

Todos 48 comentários

Veja # 1435. Solução alternativa no final. Obrigado.

a solução alternativa sugerida em "plug-ins" de webpack.config.js

new webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(en|de|cz|eu)$/)

não funcionou

O problema mencionado acima é sobre a instrução require('./locale' + name) incluída no arquivo min / moment-with-locales.js. Não é mais necessário porque todos os locais já estão incluídos neste arquivo.

Infelizmente, o webpack tenta resolver todas as instruções require - portanto, este aviso.

@ichernev - Eu não uso webpack, mas parece que o argumento de @mheimschild é razoável. Não tenho certeza de como lidar com isso.

A solução mais simples para convencer o webpack a não procurar localidades já incluídas no moment-with-locales.js é forçá-lo a carregar outra coisa. Isso funcionou para mim:

instalar módulo vazio (literariamente não contém nada)
npm install --save-dev empty-module
e configurar ContextReplacementPlugin da seguinte maneira
new webpack.ContextReplacementPlugin(/\.\/locale$/, 'empty-module', false, /js$/)

Espero que isso ajude.

Obrigado pela solução alternativa @mheimschild - teria sido bom ter isso resolvido já no Webpack 2, mesmo se o módulo vazio fosse incluído como uma dependência dev automaticamente.

Parece que não há necessidade de usar empty-module , apenas altere para nulo, ele ainda funciona em ContextReplacementPlugin

new webpack.ContextReplacementPlugin(/\.\/locale$/, null, false, /js$/)

apenas tive um problema semelhante ao usar momentjs via npm
Descobri que em locales.js se refere a ./locale/
Eu presumo essa linha tentando encontrar a localização do idioma. CMIIW

Enquanto isso, os arquivos de local estão localizados em ../../locale/ de locale.js
alterando essa linha para require ('../../locale/' + name); resolvi o problema, mas não consegui editar node_modules diretamente assim no meu servidor

tentarei a maneira webpack mencionada acima mais tarde

EDIT: Eu estava executando isso no windows, parece que há um problema de caminho. Eu tentei rodar o moment no linux e funciona muito bem

Usei o módulo ignore com bons resultados. Isso pode ajudar alguém:

    // /app/js/webpack.config.js
    plugins: [

        // Fixes warning in moment-with-locales.min.js 
        //   Module not found: Error: Can't resolve './locale' in ...
        new webpack.IgnorePlugin(/\.\/locale$/)
    ]

@miguelrincon funciona bem!

Impressionante. Funciona!

@miguelrincon ou similar - podemos obter uma solicitação de pull nos documentos para isso? Ele estaria na seção de uso em webpack.

Como corrigir em aplicativos híbridos Ionic 3.5 com Angular 4 onde não temos o arquivo webpack.config?

Tentei a sugestão @miguelrincon acima, mas não funcionou.
ou seja, ele não lança o erro durante a compilação, mas o mesmo erro é lançado no log do console do navegador.

Depois de dar uma olhada, achei isso e funciona perfeitamente!

https://github.com/afc163/react-boilerplate/commit/61ec8a19df0fcb56d407b795cb6c87141e0e14a7

\\ webpack.js

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

Este problema apareceu para mim no moment.js 2.19.0. Se você precisa fazer seu aplicativo funcionar agora, uma reversão deve fazer isso. Por exemplo:

npm install [email protected] --save

Obrigado @ jeff3dx Isso corrigiu meu problema!

@ jeff3dx Ocorreu exatamente o mesmo com a versão mais recente, mas adicionar o alias de resolução sugerido por @ M1chaelTran ainda funciona.

Confirmo que aderir ao 2.18 corrige o problema imediatamente.

O mesmo aqui. Usando React 16, instalei o momento 2.19 e obteve erros. Revertido para 2.18, sem erros.

querida, eu resolvo!
src / lib / locale / locales.js na linha 61,
61 require ('./ locale /' + nome);
mudar para ser:
61 requer ('./' + nome);
"moment with locales:" ./locale "not found" será resolvido.

@ wushuang5112 você não pode editar um node_module, então sua solução exigiria adicionar momento ao repositório, o que não é bom

Também tivemos um problema ao atualizar para o momento 2.19 em um aplicativo que também usa react e webpack. Reverter para 2,18 corrigiu isso.

Em vez de apenas voltar, eu usaria a solução de @MlchaelTran de usar um alias para momentjs dentro da configuração do webpack. Funcionou como um encanto e me permite continuar usando as últimas

resolvido! ... v2.19.1

@ M1chaelTran cara você é uma benção, muito obrigado !!!

Ainda estou vendo o problema na v2.19.1

WARNING in ./~/moment/src/lib/locale/locales.js
Module not found: Error: Can't resolve './locale' in '/project/node_modules/moment/src/lib/locale'
 @ ./~/moment/src/lib/locale/locales.js 56:12-46
 @ ./~/moment/src/lib/locale/locale.js
 @ ./~/moment/src/moment.js
 @ dll reactBoilerplateDeps

No entanto, o truque do alias @ M1chaelTran funcionou para mim.

@electrobabe Acho que o problema é ... o doc está desatualizado sobre isso. então...

Para resolver isso: Can't resolve './locale' in , tente importar moment e min/locales vez de moment-with-locales . Está fixo para mim!

A melhor referência para isso é:
http://momentjs.com/docs/#/i18n/loading -into-browser /

O downgrade para 2.18 não resolve o problema para mim. Ainda tem este: Erro: Não é possível encontrar o módulo "./locale"

O estranho é que para consertar isso:

  • no meu projeto react-native tenho que importar o arquivo moment-with-locales
  • no meu projeto reactjs , só preciso importar o arquivo moment/locales

@manelephant Acho que isso resolve o problema: https://github.com/moment/moment/issues/2979#issuecomment -346636284

O downgrade para 2.18 não resolve o problema para mim.

eu uso o cli angular.
momento funcionou, mas quando eu quero exportar meu componente com npm execute packagr ==>

Compilando para FESM15
'locale' não é exportado por 'node_modulesmoment \ srcmoment.js'

BUILD ERROR
Não é possível chamar um namespace ('momento')
Erro: não é possível chamar um namespace ('momento')

alguem pode me ajudar?

Parece que há muitos conselhos úteis neste tópico. Adoraríamos fazer alguns RP em nossos documentos sobre isso! https://github.com/moment/momentjs.com

Obrigado por todas as informações.

ATUALIZAÇÃO: encontrei uma solução.

A maneira certa de importar:

import * as moment_ from 'moment'; const moment = moment_;

e em ng-package.json:

{ "lib": { "externals": { "moment": "moment" } } }

Por mim a estrutura era falsa, os externos não estavam dentro de lib, então packgr estava procurando por lib.externals e não encontrou o momento.

Ng-packgr & momento

Estou usando a versão mais recente, agora é a 2.22.2.

Enquanto estou tentando usar o ng-packagr e empacotar meu projeto, recebo este erro. O mesmo que: @vZanchiV

'locale' não é exportado por 'node_modulesmoment \ srcmoment.js'

BUILD ERROR
Não é possível chamar um namespace ('momento')
Erro: não é possível chamar um namespace ('momento')

No projeto é importador desta forma:

importar * como momento de 'momento';

Encontrei uma solução alternativa que não deu certo, tentei importá-la como:

import * as momentImportado de 'moment';

Após este método eu poderia exportar meu projeto com ng-packagr, mas depois não consegui importar meu projeto em outro projeto, com este problema

Módulo não encontrado: Erro: Não é possível resolver './locale' em 'C: \ development \ angularTest \ angulartestnode_modules \ modulename

Para confirmar a solução de @ francisrod01 , mudei minha importação, para que em vez de

import moment from 'moment/min/moment-with-locales'

Eu mudei para

import moment from 'moment'
import 'moment/min/locales'

E isso resolvido para mim. Espero que ajude.

Eu descobri que a solução de alias postada acima por @ M1chaelTran funciona bem. Caso alguém que esteja usando o Laravel Mix esteja se perguntando como aplicá-lo, seu webpack.mix.js deve ser semelhante a este no topo:

let mix = require('laravel-mix');

mix.webpackConfig({
    resolve: {
        alias: {
            moment$: 'moment/moment.js'
        }
    }
});

tente todas as soluções acima, apenas a 'versão do momento de downgrade' pode resolver. Mas alguns dos meus módulos, como 'antd', requerem 2.19.0. então eu acho que não posso fazer o downgrade

        new webpack.ContextReplacementPlugin(/^\.\/locale$/, (context) => {
            if (!/\/moment\//.test(context.context)) return;

            Object.assign(context, {
                regExp: /^\.\/\w+/,
                request: '../../locale', // resolved relatively
            });
        }),

Essa solução funcionou para mim.

Parece ser o mesmo problema que # 4216 (e # 3872 para inicializar).

Provavelmente é melhor referir-se ao nº 4216, uma vez que tem a maior história

@aaronkrohn obrigado, esta solução funciona com

Tente carregar o locale primeiro em vez de moment.min.js.

"momento": [
"../node_modules/moment/locale/en-au.js",
"../node_modules/moment/min/moment.min.js"
]

isso vai resolver meu problema.

Eu tenho o momento 2.24.0 e finalmente funcionou para mim:

    // Fixes warning in moment-with-locales.min.js
    //   Module not found: Error: Can't resolve './locale' in ..
    new webpack.ContextReplacementPlugin(/^\.\/locale$/, context => {
      if (!/\/moment\//.test(context.context)) return

      Object.assign(context, {
        regExp: /^\.\/\w+/,
        request: '../locale', // resolved relatively
      })
    })

Quase o mesmo que a correção de @aaronkrohn , mas em vez de request: '../../locale', tive que usar request: '../locale', .

Aqui está a solução para esse problema:

Arquivo: "moment \ src \ liblocalelocales.js" linha 56:
"./locale" deve ser alterado para "../../locale"

Alexandra

A solução é simples ...

encontre qualquer coisa assim:

import moment from 'moment/src/moment';

e substitua por este

import * as moment from 'moment';

Com o create-react-app , a importação abaixo funcionou bem para mim

import * as moment from "moment/moment.js"

Com o create-react-app , a importação abaixo funcionou bem para mim

import * as moment from "moment/moment.js"

A solução da @mssui funcionou para mim

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

adicione acima a package.json e re yarn. Tudo bem, por mim

webpack.config.js

por favor, onde posso encontrar este arquivo, não consigo encontrar o caminho ao qual você se referiu, obrigado antecipadamente,

Fiz uma solução alternativa copiando a pasta de origem do momento de um projeto mais antigo e funcionou para mim

Consulte https://momentjs.com/docs/#/ -project-status /

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

Questões relacionadas

Shoroh picture Shoroh  ·  3Comentários

tanepiper picture tanepiper  ·  3Comentários

IbraheemAlSaady picture IbraheemAlSaady  ·  3Comentários

dogukankotan picture dogukankotan  ·  3Comentários

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