Webpack: „istnieje wiele modułów o nazwach różniących się tylko wielkością liter”, ale moduły, do których się odwołujemy, są identyczne

86

Używam pakietu webpack 3.8.1 i otrzymuję kilka wystąpień następującego ostrzeżenia dotyczącego kompilacji:

WARNING in ./src/Components/NavBar/MainMenuItemMobile.js
There are multiple modules with names that only differ in casing.
This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.
Use equal casing. Compare these module identifiers:
* /Users/path/to/babel-loader/lib/index.js!/Users/path/to/NavBar/MainMenuItemMobile.js
    Used by 1 module(s), i. e.
    /Users/path/to/babel-loader/lib/index.js!/Users/path/to/NavBar/ConstructedMainMenuItems.js
* /Users/path/to/babel-loader/lib/index.js!/Users/path/to/Navbar/MainMenuItemMobile.js
    Used by 1 module(s), i. e.
    /Users/path/to/babel-loader/lib/index.js!/Users/path/to/Navbar/ConstructedMainMenuItems.js
.....
(webpack)-hot-middleware/client.js ./src/index.js

Mylące jest to, że te „dwa” pliki to tylko jeden plik - w katalogu nie ma dwóch plików, których nazwy różnią się tylko wielkością liter.

Zauważyłem również, że mój gorący program przeładowujący często nie rejestruje zmian w pliku, jeśli mają na niego wpływ te ostrzeżenia.

Co może być przyczyną tego problemu?

tcelferact
źródło
sprawdź to, to może rozwiązać twój problem stackoverflow.com/questions/61054565/…
Sarthak Saklecha

Odpowiedzi:

147

Zwykle jest to wynikiem drobnej literówki.

Na przykład, jeśli jesteś importowanie modułów jak import Vue from 'vue', import Vuex from 'vuex'.

Przejrzyj swoje pliki i sprawdź, gdzie użyłeś from 'Vue'lub from 'Vuex'- upewnij się, że używasz dokładnie tych samych wielkich liter (wielkich liter), co w instrukcjach importu.

Opisy błędów powinny być napisane jaśniej, ale to, co wyjaśniłem, było przyczyną mojego problemu za każdym razem dla tego błędu w poleceniach webpacka.

matthiku
źródło
8
Masz rację, to była nazwa ścieżki, a nie nazwa modułu, i to mnie zrzuciło. Miałem… NavBar/MainMenuItemMobile.js„b” w Navbar powinno być małe.
tcelferact
2
Dokładnie stary, w moim przypadku użyłem React i trow error podczas importu: import React, { Component } from 'React';to fix justfrom 'react
rflmyk
4
Mój problem polegał na tym, że w jednym komponencie odwoływałem się, components/vue.jspodczas gdy w innym odwoływałem sięcomponents/Vue.js
Dennis
Twój komentarz @ adc17 pomógł mi zrozumieć tajemnicze dane wyjściowe. Przeczytaj to rozwiązanie w WebPack GitHub Wiki i po prostu nie mogłem go zrozumieć, ponieważ wszystko wyglądało poprawnie. To niesamowite, jak blisko „l” wygląda jak „L”, kiedy tekst jest bardzo mały… hehe.
Guy Park
1
Dodam tylko - kiedy miałem ten błąd, to dlatego, że moja ścieżka w GitBashmiała małe litery, usersgdzie Webpackoczekiwałem dużej litery Users.
sleepy_daze
82

Dla innych, którzy borykają się z tym problemem i próbowali sugerowanych poprawek bez powodzenia, oto inne możliwe rozwiązanie.

Upewnij się, że ścieżka, której użyłeś w swoim terminalu, ma poprawną wielkość liter. Na przykład, jeśli używasz git bash w systemie Windows, a Twój projekt ma następującą ścieżkę:

C:\MyProjects\project-X

Jeśli uzyskasz do niego dostęp za pomocą cd /c/myprojects/project-x(zwróć uwagę na brak wielkich liter), a następnie uruchomisz, npm startmożesz napotkać ten problem.

Rozwiązaniem byłoby rozważenie wielkości liter w ścieżce projektu i użycie jej w następujący sposób:

cd /C/MyProjects/project-X

Dimitar Dimitrov
źródło
11
To jest dokładnie mój problem. Dziękuję Ci!
user2138568
1
Uratowałeś mi dzień! Wielkie dzięki!
Jeff Chen,
1
Wow… właśnie mi pomogłeś! Używam Git bash głównie w systemie Windows. Miałem złą obudowę, jak ją zmieniłem, działała. Warto zaznaczyć, że niewłaściwa obudowa w Powershellu nie będzie skutkowała tymi samymi błędami, wygląda na to, że gdzieś za kulisami ścieżka jest konwertowana na odpowiednią obudowę.
Ryan Eastabrook
2
Miałem dokładnie ten problem; jednak po zainstalowaniu różnych pakietów w różnym czasie z różnymi node_moduleswielkościami liter , mój folder został zamknięty. Usunąłem go całkowicie, uruchomiłem ponownie npm installi wszystkie ostrzeżenia zniknęły.
Nate
1
Uratowałeś mi dzień!
Hiruni Nimanthi
17

Zdarzyło mi się to na kątowej 6. Jest to błąd użycia dużych i małych liter, który może zignorować Twój edytor ide lub tekstu. UŻYŁEM

import { PayComponent }      from './payment/pay/pay.component';

ZAMIAST

import { PayComponent }      from './Payment/pay/pay.component';

WYOBRAŹ sobie TYLKO „P” i „p”. Powodzenia.

Ahmed Adewale
źródło
1
Dla mnie było to datatables.net-fixedheader(poprawnie) zamiast DataTables.net-fixedheader(źle) w systemie Windows 10.
Jonas Gröger
9

OMG, w końcu znalazłem rozwiązanie mojego problemu.

Używam terminala VS Code i używałem pulpitu zamiast pulpitu w ścieżce monitu:

C:\Users\Hans\desktop\NODE JS\mysite>

Aby to naprawić, musiałem po prostu zamknąć folder projektu i ponownie go otworzyć:

File -> Close Folder
File -> Open Folder

A teraz terminal VS Code używa poprawnej ścieżki zachęty.

felipe
źródło
3

Miałem ten sam problem w projekcie Angular 6.

Ten problem wystąpił, ponieważ podczas importowania komponentu w module, np

import { ManageExamComponent } from './manage-Exam.component'; 

Napisałem jak manage-Exam gdzie Exam jest zapisany wielką literą, a webpack rozumie małą literę .

Jak tylko użyłem

import { ManageExamComponent } from './manage-exam.component'; 

używany egzamin w małym i problem rozwiązany.

Shashikant Pandit
źródło
3

ten problem zdarza mi się, gdy próbuję uruchomić npm startw terminalu vscode na komputerze z systemem Windows. a problem polegał na tym, że /desktop/flatsomezamiast tego /Desktop/flatsomepo prostu zmień ścieżkę do Pulpitu za pomocą dużej Dlitery zamiast pulpitu z małymi literami dw terminalu vscode

Ndatimana Gilbert
źródło
Dziękuję Ci!. Szalał.
oyalhi
2

Uruchomiliśmy reakcję w systemie Windows i jeden z moich programistów to zobaczył, ale nikt inny nie miał problemu.

Widziałem, jak otwierają VS Code w podkatalogu projektu, a cdnastępnie przechodzę do katalogu projektu małymi literami (zamiast rzeczywistej mieszanej wielkości liter), a następnie uruchamiam npm start.

Możesz faktycznie zobaczyć nazwę katalogu małymi literami w terminalu, c:\someproject\somedirale w Eksploratorze Windows tak jest c:\SomeProject\SomeDir.

Zaskoczyło mnie, że terminal poleceń systemu Windows pozwala to zrobić.

Simon Hutchison
źródło
1
Dzieje się tak, ponieważ ... system plików Windows nie rozróżnia wielkości liter. (ponieważ w systemie Windows 10 można ustawić rozróżnianie wielkości liter, widzę)
Cody G
1
// waring
import Test from './TestHome'
// you can rename your file with camel-case and import
import Test from './test-home'
// or you should fix the path 
import Test from '@/views/TestHome'

Mam nadzieję, że te dwa sposoby rozwiążą Twój problem。

Qian
źródło
1

Jeśli używasz VS Code i robisz „ npm run dev ”, ale odpowiedni folder projektu nie jest otwarty w VS Code, pojawią się te 3 ostrzeżenia .

Rozwiązanie jest następujące: najpierw otwórz odpowiedni folder projektu, a następnie wykonaj tylko polecenie „npm run dev”

Shashank Shekhar Barik
źródło
1

Tak, dzieje się tak, jeśli użyłeś tej samej nazwy, ale zmieniono wielkość liter: na przykład użyłeś

import React from 'React';

Zamiast:

import React from 'react';
Jitendra Pal - JP
źródło
0

Mam też takie ostrzeżenie, ale moim problemem jest to, że np. Istnieje katalog plików projektu React:

**/src/containers/PageOne/index.js
**/src/containers/PageTWO/pageOneAction.js

**/src/containers/PageOne/index.js
**/src/containers/PageTWO/pageTWOAction.js

I będzie podobne ostrzeżenie. Ponieważ lepiej nie używać tej samej nazwy pliku (na przykład action.jsw tych folderach) z wyłączeniem index.js, w przeciwnym razie może to prowadzić do nieoczekiwanego zachowania podczas kompilowania w systemie plików z inną semantyczną wielkością liter.

Aby rozwiązać to ostrzeżenie, możemy zrobić to:

**/src/containers/PageOne/index.js
**/src/containers/PageOne/pageOneAction.js

**/src/containers/PageTWO/index.js
**/src/containers/PageTWO/pageTWOAction.js

To jest moje doświadczenie, mam nadzieję, że może komuś pomóc.

aermin
źródło
0

Miałem podobny błąd, ale nie dokładnie taki sam, jak opisano w innych odpowiedziach. Mam nadzieję, że moja odpowiedź może komuś pomóc.

Importowałem plik w dwóch komponentach (projekt Angular 7):

Składnik 1:

LANGUAGES = require("../../models/LANGUAGES.json");

Składnik 2:

LANGUAGES = require("../../models/LANGUAGES.JSON");

To głupi błąd: problem polega na tym, że używam dwóch różnych wymagań w tym samym pliku z różnymi dużymi literami (wygenerowało to ostrzeżenie).

Jak rozwiązać problem ? Użyj tego samego modelu.

Składnik 1:

LANGUAGES = require("../../models/LANGUAGES.json");

Składnik 2:

LANGUAGES = require("../../models/LANGUAGES.json");

LUB

Składnik 1:

LANGUAGES = require("../../models/LANGUAGES.JSON");

Składnik 2:

LANGUAGES = require("../../models/LANGUAGES.JSON");
Emerica
źródło
0

Podobny problem, ale mój problem dotyczył pakietów zainstalowanych w C:\Users\<username>\AppData\Local\Yarn. Usunięcie tego folderu i ponowne dodanie pakietów globalnych, które chciałem, rozwiązało problem.

Josh G
źródło
0

Miałem ten sam problem, nazwałem mój folder reakcji jako UI a ścieżka wygenerowana przez webpack w jakiś sposób była pisana małymi literami.

Więc zmieniłem jego nazwę na ui tj. Małymi literami zamiast UI , co sprawiło, że moja wojna od razu zniknęła.

Dzięki.

Rishabh Jain
źródło
0

Jeśli widzisz to w Visual Studio Code i Gitbash, przejdź do ustawień i wyszukaj C: \ (wielkie litery C) i zmień ścieżkę do pliku Gitbash.exe na c: \ i zniknie.

httpete
źródło
0

W moim przypadku (Win7, VSCode, Angular 6) problem utrzymuje się nawet po naprawieniu wszędzie niewłaściwej ścieżki sprawy. Wygląda na to, że pakiet WebPack w jakiś sposób buforuje ścieżkę, więc aby go rozwiązać:

  • Zmień nazwę folderu lub pliku, który powoduje problemy, na inną
  • Budować
  • Wystąpił błąd
  • Zmień nazwę z powrotem
  • Budować
  • Sukces
Brudas
źródło
0

Ja też miałem ten sam problem. Przeszedłem do katalogu Trade_v3, podczas gdy rzeczywisty katalog to Trade_V3. Po zmianie katalogu ten błąd nie zgłosił.

Raja Sekar
źródło
0

Liczy się również przypadek dysku literowego. W moim przypadku Windows 10 miał wielką literę „C”, podczas gdy ja miałem małą literę „c” w pliku.

icernos
źródło
0

I w obliczu tego samego problemu w Vue.js . Ostatecznie okazało się, że zaimportowałem komponent w dwóch miejscach z różnymi przestrzeniami nazw.

import Step1 from '~/Components/Application/Step1'

import Step1 from './Step1'

Naprawiono to, zmieniając drugi na:

import Step1 from '~/Components/Application/Step1'

Mam nadzieję, że niektórym z was to pomoże ...

Sandip Mane
źródło
0

Zdarzyło mi się to samo, ponieważ zmieniłem nazwę folderu projektu na „Myclass”, aw git bash z jakiegoś powodu było to „myclass”. Kiedy zmieniłem na niższe „m”, komunikat się zatrzymał.

Chen Peleg
źródło
0

Żadne z tych rozwiązań nie działało dla mnie. Co to było:

  • Usuń problematyczne pliki (ale zrób ich kopię zapasową w innym miejscu!).
  • Zatwierdź zmianę w Git.
  • Dodaj ponownie te same pliki z kopii zapasowej.
  • Zatwierdź nowe pliki w Git ... problem rozwiązany!

W moim przypadku po prostu zmieniłem wielkość liter w nazwach plików zawierających zaimportowane moduły. Pojawiały się jako małe litery w systemie plików (OSX Finder, Bash) oraz w edytorze kodu (VS Code). Jednak otwieranie plików w kodzie VS nadal wyświetlało starą nazwę pliku na karcie edytora kodu. Próbowałem całkowicie usunąć pliki, a następnie dodać je ponownie. To nie zadziałało - nowo dodane pliki nadal wyświetlały stare nazwy w zakładkach edytora, a moje kompilacje wciąż się psują.

Następnie po kilku godzinach daremnych prób naprawy odkryłem, że Git nie traktuje zmian wielkości liter w plikach jako zmian, więc tak naprawdę nigdy nie zmienił tych nazw plików:

Jak dokonać zmian w nazwach plików uwzględniających wielkość liter w Git?

Więc usunąłem problematyczne pliki, przekazałem je do Git, ponownie je dodałem i ponownie zatwierdziłem - i zadziałało. Brak ostrzeżeń i błędy kompilacji zniknęły.

d13
źródło
0

Jeśli masz ten błąd w odsyłaczu do next.js (w Reakcie):

import Link from 'next/Link'

ZAMIAST

import Link from 'next/link'
Mohammad Fallah
źródło