<p>Moment mit Gebietsschemas: "./locale" nicht gefunden</p>

Erstellt am 22. Feb. 2016  ·  48Kommentare  ·  Quelle: moment/moment

Ich erhalte diese Warnung bei Verwendung von 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

irgendwelche Hinweise?

Discussion Documentation Help Wanted

Hilfreichster Kommentar

Ich habe das Ignoriermodul mit guten Ergebnissen verwendet. Dies könnte jemandem helfen:

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

Alle 48 Kommentare

Siehe # 1435. Problemumgehung am Ende. Vielen Dank.

die vorgeschlagene Problemumgehung in "Plugins" von webpack.config.js

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

funktioniert nicht

Das oben erwähnte Problem betrifft die Anweisung require('./locale' + name) , die in der Datei min / moment-with-locales.js enthalten ist. Dies ist nicht mehr erforderlich, da alle Gebietsschemas bereits in dieser Datei selbst enthalten sind.

Leider versucht das Webpack, alle erforderlichen Anweisungen aufzulösen - daher diese Warnung.

@ichernev - Ich @mheimschild macht, vernünftig ist. Ich bin mir nicht sicher, wie ich damit umgehen soll.

Die einfachste Lösung, um Webpack davon zu überzeugen, nicht nach Gebietsschemas zu suchen, die bereits in der Datei moment-with-locales.js enthalten sind, besteht darin, ihn zu zwingen, stattdessen etwas anderes zu laden. Das hat bei mir funktioniert:

leeres Modul installieren (es enthält literarisch nichts)
npm install --save-dev empty-module
und konfigurieren Sie dann ContextReplacementPlugin wie folgt
new webpack.ContextReplacementPlugin(/\.\/locale$/, 'empty-module', false, /js$/)

Hoffentlich hilft das.

Vielen Dank für die Problemumgehung @mheimschild - Es wäre schön gewesen, wenn dies bereits in Webpack 2 behoben worden wäre, selbst wenn das leere Modul automatisch als Entwicklungsabhängigkeit aufgenommen worden wäre.

Es scheint nicht nötig zu sein, empty-module . Ändern Sie es einfach in null. Es funktioniert weiterhin in ContextReplacementPlugin

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

hatte gerade ein ähnliches Problem bei der Verwendung von momentjs über npm
Ich fand, dass es sich bei locales.js auf ./locale/ bezieht
Ich gehe davon aus, dass diese Zeile versucht, die Sprachlokalisierung zu finden. CMIIW

In der Zwischenzeit befinden sich die Gebietsschemadateien auf ../../locale/ von locale.js
Durch Ändern dieser Zeile in require ('../../locale/' + name); ich das Problem behoben, aber ich konnte node_modules direkt auf meinem Server so bearbeiten

werde später versuchen, Webpack Weg oben erwähnt

EDIT: Ich habe dies unter Windows ausgeführt, es sieht nach einem Pfadproblem aus. Ich habe versucht, Moment unter Linux zu laufen und es funktioniert gut

Ich habe das Ignoriermodul mit guten Ergebnissen verwendet. Dies könnte jemandem helfen:

    // /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 funktioniert gut!

Genial. Es klappt!

@miguelrincon oder ähnliches - können wir dafür eine Pull-Anfrage für Dokumente erhalten? Es wäre in der Verwendung Abschnitt unter Webpack.

Wie behebe ich in Hybrid Apps Ionic 3.5 mit Angular 4, wo wir keine webpack.config-Datei haben?

Ich habe oben den Vorschlag von
Das heißt, der Fehler wird während des Builds nicht ausgelöst, aber der gleiche Fehler wird im Protokoll der Browserkonsole ausgegeben.

Nachdem ich mich umgesehen hatte, fand ich das und es funktioniert perfekt!

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

\\ webpack.js

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

Dieses Problem ist für mich in moment.js 2.19.0 aufgetreten. Wenn Sie Ihre Anwendung sofort zum Laufen bringen müssen, sollte dies durch ein Rollback erfolgen. Zum Beispiel:

npm install [email protected] --save

Danke @ jeff3dx Dies hat mein Problem behoben!

@ jeff3dx Ich hatte genau das gleiche @ M1chaelTran vorgeschlagenen

Ich bestätige, dass das Festhalten an 2.18 das Problem sofort behebt.

Hier gilt das gleiche. Mit React 16 wurde Moment 2.19 installiert und es wurden Fehler angezeigt. Zurück zu 2.18, keine Fehler.

Lieber, ich löse es!
src / lib / locale / locales.js in Zeile 61,
61 erfordern ('./ locale /' + name);
ändern, um zu sein:
61 erfordern ('./' + Name);
"Moment mit Gebietsschemas:" ./locale "nicht gefunden" wird gelöst.

@ wushuang5112 Sie können ein node_module nicht bearbeiten, daher müsste Ihre Lösung dem Repository einen Moment hinzufügen, was nicht gut ist

Wir hatten auch gerade ein Problem beim Upgrade auf Moment 2.19 in einer App, die auch React und Webpack verwendet. Das Zurücksetzen auf 2.18 hat das Problem behoben.

Anstatt nur ein Rollback durchzuführen , würde ich die Lösung von

gelöst! ... v2.19.1

@ M1chaelTran Mann du bist ein Segen, vielen Dank !!!

Ich sehe das Problem immer noch in Version 2.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

Der Alias-Trick @ M1chaelTran hat jedoch bei mir funktioniert.

@electrobabe Ich denke, das Problem ist ... das Dokument ist darüber veraltet. damit...

Um dies zu lösen: Can't resolve './locale' in , versuchen Sie, moment und min/locales anstelle von moment-with-locales zu importieren. Es ist auf mich festgelegt!

Die bessere Referenz dafür ist:
http://momentjs.com/docs/#/i18n/loading -into-browser /

Ein Downgrade auf 2.18 löst das Problem für mich nicht. Habe noch folgendes: Fehler: Modul "./locale" kann nicht gefunden werden

Das Seltsame ist, das zu beheben:

  • In meinem react-native -Projekt muss ich eine moment-with-locales -Datei importieren
  • In meinem reactjs -Projekt muss ich nur die moment/locales -Datei importieren

@manelephant Ich denke, dies löst das Problem: https://github.com/moment/moment/issues/2979#issuecomment -346636284

Ein Downgrade auf 2.18 löst das Problem für mich nicht.

Ich benutze eckige Cli.
Moment hat funktioniert, aber wenn ich meine Komponente mit npm exportieren möchte, starte packagr ==>

Kompilieren zu FESM15
'locale' wird nicht von 'node_modulesmoment \ srcmoment.js' exportiert.

FEHLER ERSTELLEN
Namespace kann nicht aufgerufen werden ('Moment')
Fehler: Namespace kann nicht aufgerufen werden ('Moment')

kann mir jemand helfen?

Es scheint, dass dieser Thread viele nützliche Ratschläge enthält. Wir würden gerne ein paar PRs in unsere Dokumente aufnehmen! https://github.com/moment/momentjs.com

Danke für alle Informationen.

UPDATE: Ich habe eine Lösung gefunden.

Der richtige Weg zum Importieren:

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

und in ng-package.json:

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

Bei mir war die Struktur falsch, die externen Elemente befanden sich nicht in lib, also suchte packgr nach lib.externals und konnte keinen Moment finden.

Ng-packgr & moment

Ich verwende die neueste Version, im Moment ist es

Während ich versuche, ng-packagr zu verwenden und mein Projekt zu packen, wird dieser Fehler angezeigt. Gleich wie: @vZanchiV

'locale' wird nicht von 'node_modulesmoment \ srcmoment.js' exportiert.

FEHLER ERSTELLEN
Namespace kann nicht aufgerufen werden ('Moment')
Fehler: Namespace kann nicht aufgerufen werden ('Moment')

Im Projekt ist es Importeur auf folgende Weise:

* als Moment von 'Moment' importieren;

Ich habe eine Problemumgehung gefunden, die nicht gut funktioniert hat. Ich habe versucht, sie wie folgt zu importieren:

import * as momentImportiert von 'moment';

Nach dieser Methode konnte ich mein Projekt mit ng-packagr exportieren, aber dann konnte ich mein Projekt mit diesem Problem nicht in ein anderes Projekt importieren

Modul nicht gefunden: Fehler: './locale' in 'C: \ development \ angularTest \ angulartestnode_modules \ modulename kann nicht aufgelöst werden

Um die Lösung von @ francisrod01 zu bestätigen, habe ich meinen Import so geändert, dass anstelle von

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

Ich wechselte zu

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

Und das hat sich für mich gelöst. Ich hoffe es hilft.

Ich fand, dass die oben von @ M1chaelTran veröffentlichte Alias-Lösung gut funktioniert. Falls sich jemand, der Laravel Mix verwendet, fragt, wie er es anwenden soll, sollte Ihr webpack.mix.js ähnlich aussehen:

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

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

Versuchen Sie alle oben genannten Lösungen, nur die 'Downgrade-Moment-Version' kann aufgelöst werden. Einige meiner Module wie 'antd' erfordern jedoch 2.19.0. Ich denke, ich kann es nicht herabstufen

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

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

Diese Lösung hat bei mir funktioniert.

Scheint das gleiche Problem zu sein wie # 4216 (und # 3872 zum Booten).

Wahrscheinlich am besten auf # 4216 verweisen, da dies die größte Geschichte hat

@aaronkrohn danke, diese Lösung funktioniert mit

Versuchen Sie zuerst das Gebietsschema anstelle von moment.min.js zu laden.

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

Dies wird mein Problem lösen.

Ich habe Moment 2.24.0 und das hat bei mir endlich funktioniert:

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

Fast das gleiche wie bei @aaronkrohn , aber anstelle von request: '../../locale', ich request: '../locale', .

Hier ist die Lösung für dieses Problem:

Datei: "moment \ src \ liblocalelocales.js" Zeile 56:
"./locale" muss in "../../locale" geändert werden.

Alexandra

Das Update ist einfach ...

finde so etwas:

import moment from 'moment/src/moment';

und ersetzen Sie es damit

import * as moment from 'moment';

Mit der Create-React-App hat der unten stehende Import für mich gut funktioniert

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

Mit der Create-React-App hat der unten stehende Import für mich gut funktioniert

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

Die Lösung von @mssui hat bei mir funktioniert

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

oben zu package.json hinzufügen und erneut fädeln. OK für mich

webpack.config.js

Bitte, wo finde ich diese Datei? Ich kann den Pfad, auf den Sie verwiesen haben, nicht finden. Vielen Dank im Voraus.

Ich habe eine Problemumgehung durchgeführt, indem ich den Moment-Quellordner aus einem älteren Projekt kopiert habe, und es hat bei mir funktioniert

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen