<p>momento con configuraciones regionales: "./locale" no encontrado</p>

Creado en 22 feb. 2016  ·  48Comentarios  ·  Fuente: moment/moment

Recibo esta advertencia cuando uso el paquete web:

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

¿alguna pista?

Discussion Documentation Help Wanted

Comentario más útil

Usé el módulo de ignorar con buenos resultados. Esto podría ayudar a alguien:

    // /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 comentarios

Ver # 1435. Solución al final. Gracias.

la solución alternativa sugerida en "complementos" de webpack.config.js

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

no funcionó

El problema mencionado anteriormente es sobre la declaración require('./locale' + name) incluida en el archivo min / moment-with-locales.js. Ya no es necesario porque todas las configuraciones regionales ya están incluidas en este archivo.

Desafortunadamente, el paquete web intenta resolver todas las declaraciones obligatorias, de ahí esta advertencia.

@ichernev : no uso webpack, pero parece que el punto que hace @mheimschild es razonable. Sin embargo, no estoy seguro de cómo manejarlo.

La solución más simple para convencer a webpack de que no busque locales ya incluidos en el momento con locales.js es obligarlo a cargar algo más. Esto funcionó para mí:

instalar módulo vacío (literario no contiene nada)
npm install --save-dev empty-module
y luego configure ContextReplacementPlugin de la siguiente manera
new webpack.ContextReplacementPlugin(/\.\/locale$/, 'empty-module', false, /js$/)

Ojalá esto ayude.

Gracias por la solución @mheimschild . Hubiera sido bueno tener esto resuelto ya en Webpack 2, incluso si el módulo vacío se incluiría automáticamente como una dependencia de desarrollo.

Parece que no es necesario usar empty-module , solo cámbielo a nulo, todavía funciona en ContextReplacementPlugin

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

acaba de tener un problema similar al usar momentjs a través de npm
Encontré que en locales.js se refiere a ./locale/
Asumo esa línea tratando de encontrar la localización del idioma. CMIIW

Mientras tanto, los archivos de configuración regional se encuentran en ../../locale/ desde locale.js
al cambiar esa línea a require ('../../locale/' + name); resolví el problema pero no pude editar node_modules directamente así en mi servidor

intentará la forma de paquete web mencionada anteriormente más adelante

EDITAR: Estaba ejecutando esto en Windows, parece un problema de ruta. Intenté ejecutar moment en linux y funciona bien

Usé el módulo de ignorar con buenos resultados. Esto podría ayudar a alguien:

    // /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 bien!

Increíble. ¡Funciona!

@miguelrincon o similar: ¿podemos obtener una solicitud de extracción en documentos para eso? Estaría en la sección de uso en webpack.

¿Cómo solucionarlo en aplicaciones híbridas Ionic 3.5 con Angular 4 donde no tenemos un archivo webpack.config?

Probé la sugerencia de
es decir, no arroja el error durante la compilación, pero el mismo error aparece en el registro de la consola del navegador.

Después de mirar a mi alrededor, encontré esto y ¡funciona perfectamente!

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

\\ webpack.js

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

Este problema me apareció en moment.js 2.19.0. Si necesita que su aplicación funcione ahora mismo, debería hacerlo una reversión. Por ejemplo:

npm install [email protected] --save

Gracias @ jeff3dx ¡ Esto solucionó mi problema!

@ jeff3dx Tuve exactamente lo mismo sucediendo con la última versión, pero agregar el alias de resolución como lo sugiere @ M1chaelTran todavía funciona.

Confirmo que atenerse a 2.18 soluciona el problema de inmediato.

Igual que aquí. Usando React 16, instalé el momento 2.19 y obtuve errores. Revertido a 2.18, sin errores.

querido, yo lo soluciono!
src / lib / locale / locales.js en la línea 61,
61 require ('./ locale /' + nombre);
cambiar para ser:
61 require ('./' + nombre);
"Momento con locales:" ./locale "no encontrado" se resolverá.

@ wushuang5112 no puede editar un node_module, por lo que su solución requeriría agregar un momento al repositorio, lo cual no es bueno

También tuvimos un problema al actualizar al momento 2.19 en una aplicación que también usaba react y webpack. Volviendo a 2.18 lo arregló.

En lugar de simplemente retroceder, usaría la solución de @ M1chaelTran de usar un alias para momentjs dentro de la configuración del paquete web. Funcionó como un encanto y me permite seguir usando lo último.

resuelto! ... v2.19.1

@ M1chaelTran hombre, eres una bendición, ¡muchas gracias!

Sigo viendo el problema en 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

Sin embargo, el truco de alias de @ M1chaelTran funcionó para mí.

@electrobabe Creo que el problema es ... que el documento está desactualizado sobre esto. entonces...

Para resolver esto: Can't resolve './locale' in , intente importar moment y min/locales lugar de moment-with-locales . ¡Me lo ha arreglado!

La mejor referencia para esto es:
http://momentjs.com/docs/#/i18n/loading -into-browser /

Cambiar a 2.18 no me resuelve el problema. Aún tengo esto: Error: No se puede encontrar el módulo "./locale"

Lo extraño es que para solucionar esto:

  • en mi proyecto react-native tengo que importar moment-with-locales archivo
  • en mi proyecto reactjs solo tengo que importar el archivo moment/locales

@manelephant Creo que esto resuelve el problema: https://github.com/moment/moment/issues/2979#issuecomment -346636284

Cambiar a 2.18 no me resuelve el problema.

yo uso angular cli.
El momento funcionó, pero cuando quiero exportar mi componente con npm run packagr ==>

Compilando a FESM15
'locale' no es exportado por 'node_modulesmoment \ srcmoment.js'

ERROR DE CONSTRUCCIÓN
No se puede llamar a un espacio de nombres ('momento')
Error: no se puede llamar a un espacio de nombres ('momento')

Alguien puede ayudarme ?

Parece que hay muchos consejos útiles en este hilo. ¡Nos encantaría realizar algunas relaciones públicas en nuestros documentos sobre esto! https://github.com/moment/momentjs.com

Gracias por toda la información.

ACTUALIZACIÓN: encontré una solución.

La forma correcta de importar:

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

y en ng-package.json:

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

Para mí, la estructura era falsa, los externos no estaban dentro de lib, por lo que packgr estaba buscando lib.externals y no pudo encontrar el momento.

Ng-packgr y momento

Estoy usando la última versión, ahora es 2.22.2.

Mientras intento usar ng-packagr y empaquetar mi proyecto, aparece este error. Igual que: @vZanchiV

'locale' no es exportado por 'node_modulesmoment \ srcmoment.js'

ERROR DE CONSTRUCCIÓN
No se puede llamar a un espacio de nombres ('momento')
Error: no se puede llamar a un espacio de nombres ('momento')

En el proyecto es importador de esta manera:

importar * como momento de 'momento';

Encontré una solución que no salió bien, intenté importarla como:

import * as momentImported from 'moment';

Después de este método, pude exportar mi proyecto con ng-packagr pero luego no pude importar mi proyecto en otro proyecto, con este problema

Módulo no encontrado: Error: No se puede resolver './locale' en 'C: \ development \ angularTest \ angulartestnode_modules \ modulename

Para confirmar la solución de @ francisrod01 , cambié mi importación, de modo que en lugar de

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

Me cambié a

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

Y esto me resolvió. Espero eso ayude.

Encontré que la solución de alias publicada anteriormente por @ M1chaelTran funciona bien. En caso de que alguien que use Laravel Mix se pregunte cómo aplicarlo, su webpack.mix.js debería verse similar a esto en la parte superior:

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

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

Pruebe todas las soluciones anteriores, solo la 'versión de momento de degradación' puede resolver. Pero algunos de mis módulos como 'antd' requieren 2.19.0. así que creo que no puedo degradarlo

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

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

Esta solución funcionó para mí.

Parece ser el mismo problema que # 4216 (y # 3872 para arrancar).

Probablemente sea mejor referirse al # 4216 ya que tiene la historia más grande

@aaronkrohn gracias, esta solución funciona con react-boilerplate v.4

Intente cargar la configuración regional primero en lugar de moment.min.js.

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

esto resolverá mi problema.

Tengo el momento 2.24.0 y esto funcionó para mí finalmente:

    // 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
      })
    })

Casi lo mismo que la corrección de @aaronkrohn , pero en lugar de request: '../../locale', tuve que usar request: '../locale', .

Aquí está la solución para este problema:

Archivo: "moment \ src \ liblocalelocales.js" línea 56:
"./locale" debe cambiarse a "../../locale"

Alexandra

La solución es simple ...

encontrar algo como esto:

import moment from 'moment/src/moment';

y reemplazarlo con esto

import * as moment from 'moment';

Con create-react-app , la siguiente importación funcionó bien para mí

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

Con create-react-app , la siguiente importación funcionó bien para mí

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

La solución de @mssui funcionó para mí

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

agregue arriba a package.json y vuelva a hilo. esta bien para mi

webpack.config.js

por favor, ¿dónde puedo encontrar este archivo? No puedo encontrar la ruta a la que hizo referencia. Gracias de antemano.

Hice una solución al copiar la carpeta de origen del momento de un proyecto anterior, y funcionó para mí

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

¿Fue útil esta página
0 / 5 - 0 calificaciones