<p>moment avec les paramètres régionaux: "./locale" introuvable</p>

Créé le 22 févr. 2016  ·  48Commentaires  ·  Source: moment/moment

Je reçois cet avertissement lors de l'utilisation de 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

des indices?

Discussion Documentation Help Wanted

Commentaire le plus utile

J'ai utilisé le module ignore avec de bons résultats. Cela pourrait aider quelqu'un:

    // /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$/)
    ]

Tous les 48 commentaires

Voir # 1435. Solution de contournement à la fin. Merci.

la solution de contournement suggérée dans les "plugins" de webpack.config.js

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

n'a pas marché

Le problème mentionné ci-dessus concerne l'instruction require('./locale' + name) incluse dans le fichier min / moment-with-locales.js. Ce n'est plus nécessaire car tous les paramètres régionaux sont déjà inclus dans ce fichier lui-même.

Malheureusement, webpack essaie de résoudre toutes les instructions require - donc cet avertissement.

@ichernev - Je n'utilise pas webpack, mais il semble que l'argument de @mheimschild soit raisonnable. Je ne sais pas comment le gérer.

La solution la plus simple pour convaincre Webpack de ne pas rechercher les locales déjà incluses dans le fichier moment-with-locales.js est de le forcer à charger autre chose à la place. Cela a fonctionné pour moi:

installer un module vide (il ne contient rien)
npm install --save-dev empty-module
puis configurez ContextReplacementPlugin comme suit
new webpack.ContextReplacementPlugin(/\.\/locale$/, 'empty-module', false, /js$/)

Espérons que cela aide.

Merci pour la solution de contournement @mheimschild - Cela aurait été bien d'avoir déjà résolu ce problème dans Webpack 2, même si le module vide était automatiquement inclus en tant que dépendance de développement.

Il ne semble pas nécessaire d'utiliser empty-module , changez-le simplement en null, cela fonctionne toujours dans ContextReplacementPlugin

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

vient d'avoir un problème similaire lors de l'utilisation de momentjs via npm
J'ai trouvé que sur locales.js cela fait référence à ./locale/
Je suppose que cette ligne essaie de trouver la localisation de la langue. CMIIW

Pendant ce temps, les fichiers de paramètres régionaux sont situés sur ../../locale/ partir de locale.js
en changeant cette ligne en require ('../../locale/' + name); j'ai résolu le problème mais je ne pouvais pas modifier node_modules directement comme ça sur mon serveur

essaiera la méthode Webpack mentionnée ci-dessus plus tard

EDIT: J'exécutais ceci sur Windows, cela ressemble à un problème de chemin. J'ai essayé d'exécuter moment sur Linux et cela fonctionne très bien

J'ai utilisé le module ignore avec de bons résultats. Cela pourrait aider quelqu'un:

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

Impressionnant. Ça marche!

@miguelrincon ou similaire - pouvons-nous obtenir une pull request sur docs pour cela? Ce serait dans la section d'utilisation sous webpack.

Comment réparer dans les applications hybrides Ionic 3.5 avec Angular 4 où nous n'avons pas de fichier webpack.config?

J'ai essayé la suggestion @miguelrincon ci-dessus mais cela ne fonctionne pas.
c'est-à-dire qu'il ne renvoie pas l'erreur pendant la construction, mais la même erreur est renvoyée dans le journal de la console du navigateur.

Après avoir regardé autour de moi, j'ai trouvé ça et ça marche parfaitement!

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

\\ webpack.js

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

Ce problème est apparu pour moi dans moment.js 2.19.0. Si vous avez besoin de faire fonctionner votre application maintenant, une restauration devrait le faire. Par exemple:

npm install [email protected] --save

Merci @ jeff3dx Cela a résolu mon problème!

@ jeff3dx J'ai eu exactement la même chose avec la dernière version, mais l'ajout de l'alias de résolution comme suggéré par @ M1chaelTran fait toujours l'affaire.

Je confirme que s'en tenir à la version 2.18 résout le problème immédiatement.

Pareil ici. En utilisant React 16, installé le moment 2.19 et obtenu des erreurs. Revenu à 2.18, aucune erreur.

cher, je le résous!
src / lib / locale / locales.js à la ligne 61,
61 require ('./ locale /' + nom);
changer pour être:
61 require ('./' + nom);
"moment avec locales:" ./locale "not found" sera résolu.

@ wushuang5112 vous ne pouvez pas modifier un node_module, donc votre solution nécessiterait d'ajouter un moment dans le référentiel, ce qui n'est pas bon

Nous venons également d'avoir un problème lors de la mise à niveau vers le moment 2.19 dans une application utilisant également react et webpack. Le retour à 2.18 l'a corrigé.

Au lieu de simplement revenir en arrière, j'utiliserais la solution de

résolu! ... v2.19.1

@ M1chaelTran homme vous êtes une bénédiction, merci beaucoup !!!

Je vois toujours le problème dans la 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

Cependant, l' astuce d' alias

@electrobabe Je pense que le problème est ... la doc est obsolète à ce sujet. alors...

Pour résoudre ceci: Can't resolve './locale' in , essayez d'importer moment et min/locales au lieu de moment-with-locales . C'est fixé pour moi!

La meilleure référence pour cela est:
http://momentjs.com/docs/#/i18n/loading -into-browser /

Le passage à la version 2.18 ne résout pas le problème pour moi. Toujours avoir ceci: Erreur: Impossible de trouver le module "./locale"

La chose étrange est que pour résoudre ce problème:

  • dans mon projet react-native je dois importer moment-with-locales fichier
  • dans mon projet reactjs me suffit d'importer le fichier moment/locales

@manelephant Je pense que cela résout le problème: https://github.com/moment/moment/issues/2979#issuecomment -346636284

Le passage à la version 2.18 ne résout pas le problème pour moi.

j'utilise cli angulaire.
moment travaillé mais quand je veux exporter mon composant avec npm run packagr ==>

Compilation vers FESM15
'locale' n'est pas exporté par 'node_modulesmoment \ srcmoment.js'

ERREUR DE CONSTRUCTION
Impossible d'appeler un espace de noms ('moment')
Erreur: impossible d'appeler un espace de noms ('moment')

quelqu'un peut m'aider?

Il semble qu'il y ait beaucoup de conseils utiles dans ce fil. Nous serions ravis de prendre quelques PR sur nos documents à ce sujet! https://github.com/moment/momentjs.com

Merci pour toutes les informations.

MISE À JOUR: j'ai trouvé une solution.

La bonne façon d'importer:

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

et dans ng-package.json:

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

Par moi, la structure était fausse, les externals n'étaient pas à l'intérieur de lib, donc packgr cherchait lib.externals et ne pouvait pas trouver le moment.

Ng-packgr & moment

J'utilise la dernière version, actuellement c'est 2.22.2.

Pendant que j'essaie d'utiliser ng-packagr et de compiler mon projet, j'obtiens cette erreur. Identique à: @vZanchiV

'locale' n'est pas exporté par 'node_modulesmoment \ srcmoment.js'

ERREUR DE CONSTRUCTION
Impossible d'appeler un espace de noms ('moment')
Erreur: impossible d'appeler un espace de noms ('moment')

Dans le projet, c'est l'importateur de cette façon:

importer * comme moment à partir de «moment»;

J'ai trouvé une solution de contournement qui n'a pas bien fonctionné, j'ai essayé de l'importer comme:

import * as momentImported from 'moment';

Après cette méthode, j'ai pu exporter mon projet avec ng-packagr mais j'ai ensuite échoué à importer mon projet dans un autre projet, avec ce problème

Module non trouvé: Erreur: Impossible de résoudre './locale' dans 'C: \ development \ angularTest \ angulartestnode_modules \ modulename

Pour confirmer la solution de @ francisrod01 , j'ai changé mon import, de sorte qu'au lieu de

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

J'ai changé en

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

Et cela a résolu pour moi. J'espère que cela aide.

J'ai trouvé que la solution d'alias publiée ci-dessus par @ M1chaelTran fonctionnait bien. Au cas où quelqu'un utilisant Laravel Mix se demanderait comment l'appliquer, votre webpack.mix.js devrait ressembler à ceci en haut:

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

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

essayez toutes les solutions ci-dessus, seule la `` version du moment de la rétrogradation '' peut résoudre, mais certains de mes modules comme `` antd '' nécessitent la version 2.19.0 donc je pense que je ne peux pas le déclasser

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

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

Cette solution a fonctionné pour moi.

Semble être le même problème que # 4216 (et # 3872 pour démarrer).

Il est probablement préférable de se référer au # 4216 car il a la plus grande histoire

@aaronkrohn merci, cette solution fonctionne avec react-passe-partout v.4

Essayez de charger d'abord les paramètres régionaux au lieu de moment.min.js.

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

cela résoudra mon problème.

J'ai le moment 2.24.0 et cela a finalement fonctionné pour moi:

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

Presque la même chose que le correctif de @aaronkrohn , mais au lieu de request: '../../locale', j'ai dû utiliser request: '../locale', .

Voici la solution à ce problème:

Fichier: "moment \ src \ liblocalelocales.js" ligne 56:
"./locale" doit être remplacé par "../../locale"

Alexandra

Le correctif est simple ...

trouvez quelque chose comme ça:

import moment from 'moment/src/moment';

et remplacez-le par ceci

import * as moment from 'moment';

Avec create-react-app , l'importation ci-dessous a bien fonctionné pour moi

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

Avec create-react-app , l'importation ci-dessous a bien fonctionné pour moi

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

La solution de @mssui a fonctionné pour moi

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

ajoutez ci-dessus à package.json et re yarn. OK pour moi

webpack.config.js

s'il vous plaît où puis-je trouver ce fichier, je ne trouve pas le chemin auquel vous avez fait référence, merci d'avance,

J'ai fait une solution de contournement en copiant le dossier source du moment à partir d'un projet plus ancien, et cela a fonctionné pour moi

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

Cette page vous a été utile?
0 / 5 - 0 notes