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?
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:
react-native
tenho que importar o arquivo moment-with-locales
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 /
Comentários muito úteis
Usei o módulo ignore com bons resultados. Isso pode ajudar alguém: