Nie można rozwiązać modułu (nie znaleziono) w React.js

91

Nie mogę uwierzyć, że zadaję oczywiste pytanie, ale nadal pojawia się błąd w dzienniku konsoli.

Konsola mówi, że nie może znaleźć modułu w katalogu, ale sprawdziłem co najmniej 10 razy pod kątem literówek. Tak czy inaczej, oto kod komponentu.

Chcę wyrenderować nagłówek w katalogu głównym

import React, { Component } from 'react'
import Header from './src/components/header/header'
import logo from './logo.svg'
import './App.css'

class App extends Component {
  render() {
    return (
      <Header/>
    );
  }
}

export default App;

To jest Headerskładnik

import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import navBar from './src/components/header/navBar'
import './src/css/header.css'

class Header extends Component {
    render() {
        return {
            <div>
             <div id="particles-js"></div>
             <navBar/>
             <Title/>
          </div>
        };
    }
}

ReactDOM.render(<Header/>, document.getElementById('header'));

Co najmniej 10 razy sprawdziłem, czy moduł znajduje się w tej lokalizacji ./src/components/header/headeri tak jest (folder „header” zawiera „header.js”).

Jednak React nadal zgłasza ten błąd:

Nie udało się skompilować

./src/App.js Module not found: Can't resolve './src/components/header/header' in '/home/wiseman/Desktop/React_Components/github-portfolio/src'

test npm mówi to samo.

Vladimir Jovanović
źródło
dodaj export default Header;swój „plik nagłówkowy”
Rui Costa,
1
Nadal nie działa.
Vladimir Jovanović
2
Wygląda na to, że potrzebujesz bez import Header from './components/header/header'źródła. Ścieżka pliku jest względna w stosunku do ścieżki pliku importu. Następnie musisz wyeksportować Headerz header.jsi naprawić App.rendermetodę.
Yury Tarabanko
Jeśli wyjmę componentsfolder poza srcfolder, to mówi mi, że muszę zmodyfikować node_modulespliki, na co nie zwracam uwagi.
Vladimir Jovanović
8
Nie musisz niczego ruszać. Masz nieprawidłową ścieżkę względną. Jeśli importujesz wewnątrz `` ./src/app.js '', powinno być import smth from './components/header/header'Tak samo dla tej linii import navBar from './src/components/header/navBar', powinno być w odniesieniu do bieżącej ścieżkiimport navBar from './navBar'
Yury Tarabanko

Odpowiedzi:

129

Sposób, w jaki zwykle używamy, importopiera się na ścieżce względnej.

.i ..są podobne do tego, jak używamy do nawigacji, terminaljak cd ..wychodzenie z katalogu i mv ~/file .przenoszenie filedo bieżącego katalogu.

my-app/
  node_modules/
  package.json
  src/
    containers/card.js
    components/header.js
    App.js
    index.js

W twoim przypadku App.jsjest w src/katalogu, podczas gdy header.jsjest w src/components. Do importciebie zrobi import Header from './components/header'. To z grubsza tłumaczy się w moim bieżącym katalogu, znajdź folder komponentów, który zawiera plik nagłówkowy.

Teraz, jeśli od header.js, potrzebujesz importczegoś z card, zrobiłbyś to. import Card from '../containers/card'. To przekłada się na wyjście z mojego bieżącego katalogu, poszukaj kontenerów nazw folderów, które mają plik karty.

Co do import React, { Component } from 'react'tego nie daje się uruchomić z ./lub ../czy /zatem węzeł będzie zacząć szukać w module node_modulesw celu konkretnego aż reactzostanie znaleziony. Aby uzyskać bardziej szczegółowe informacje, można ją przeczytać tutaj .

Zac Kwan
źródło
W moim przypadku brakowało kropki na początku. Dzięki!
RichArt
Poprawnie dodałem ścieżkę względną. Ale na początku dwie kropki pomogły mi rozwiązać problem. Dziękuję Ci.
Santosh
27

Jeśli tworzysz aplikację za pomocą react-create-app, nie zapomnij ustawić zmiennej środowiskowej:

NODE_PATH=./src

Lub dodaj do .envpliku do folderu głównego;

comalex3
źródło
1
To jest ten, który rozwiązałem dla mnie. Dodałem prosty App.cssdo src/i zrobił import App.css. Ale to dało mi błąd w pytaniu. Ta odpowiedź rozwiązała problem.
Maximiliano Guerra
7

Dodanie NODE_PATHjako zmiennej środowiskowej w .envjest przestarzałe i jest zastępowane przez dodanie "baseUrl": "./src"do compilerOptionsw jsconfig.jsonlub tsconfig.json.

Odniesienie

Melchia
źródło
7

Usunięto plik package-lock.json, a następnie uruchomiono

npm install

Czytaj dalej

Ivan_ug
źródło
3

w moim przypadku komunikat o błędzie to

Module not found: Error: Can't resolve '/components/body

Podczas gdy wszystko było we właściwym katalogu.

Znalazłem tę zmianę nazwy body.jsxnabody.js rozwiązać problem!

Więc dodałem ten kod, webpack.config.jsaby rozwiązać jsxjakojs

 module.exports = {
  //...
  resolve: {
    extensions: ['.js', '.jsx']
  }
};

A potem zniknął błąd kompilacji!

Tuhin A.
źródło
2

Myślę, że to podwójne użycie nagłówka. Właśnie spróbowałem czegoś podobnego i również spowodowałem problemy. Napisałem plik komponentu wielką literą, aby dopasować go do innych i zadziałało.

import Header from './src/components/header/header';

Powinien być

import Header from './src/components/header/Header';
FBaez51
źródło
Nienawidzę, że to dało mi odpowiedź, ponieważ miałem tę samą strukturę folderów i zamiast robić ./components/header/header, robiłem ./components/header... Jestem za stary na takie błędy lolol
Chris
1

Miałem podobny problem.

Przyczyna:

import HomeComponent from "components/HomeComponent";

Rozwiązanie:

import HomeComponent from "./components/HomeComponent";

UWAGA: ./ było przed komponentami. Możesz przeczytać powyższy post @Zac Kwan, aby dowiedzieć się, jak używaćimport

Bukunmi
źródło
1

Napotkałem ten sam problem, kiedy tworzyłem nową aplikację Reaguj, wypróbowałem wszystkie opcje na https://github.com/facebook/create-react-app/issues/2534, ale to nie pomogło. Musiałem zmienić port dla nowej aplikacji i wtedy zadziałało. Domyślnie aplikacje używają portu 3000. Zmieniłem port na 8001 w package.json w następujący sposób:

  "scripts": {
    "start": "PORT=8001 react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
seb_dom
źródło
0

Musisz być w folderze projektu, jeśli jesteś w tych folderach srclub publicmusisz z nich wyjść. Załóżmy więc, że nazwa Twojego projektu React to „Hello-React”cd hello-react

sobha
źródło
0

powinieneś zmienić import nagłówka z ' ./ src / components / header / header 'do

importuj nagłówek z „ .. / src / components / header / header”

harun ugur
źródło
0

Możesz spróbować wykonać polecenie „npm install” w folderze aplikacji. Może to również rozwiązać problem. U mnie to zadziałało.

Niki Palyi
źródło
0

Miałem ten sam problem i rozwiązałem go. Sprawdź, czy index.jsplik jest w formaciesrc folderze, a następnie jakikolwiek plik importujesz, folder zawierający ten musi również znajdować się w folderze src.

Oznacza to, że jeśli folder komponentów znajduje się poza srcfolderem, po prostu przeciągnij go do srcfolderu w edytorze, ponieważ pliki znajdują się poza folderemsrc folderem nie są importowane.

Wtedy będziesz mógł importować używając ./components/header/header(w tym przypadku) wprowadź opis obrazu tutaj

Biraj Gupta
źródło
0

Jest lepszy sposób na poradzenie sobie z importem modułów w Twojej aplikacji React. Rozważ zrobienie tego:

Dodaj jsconfig.jsonplik do folderu podstawowego. To jest ten sam folder zawierający plik package.json. Następnie zdefiniuj importy podstawowego adresu URL w nim:

//jsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./src"
  }
}

Zamiast dzwonić, ../../możesz to łatwo zrobić:

import navBar from 'components/header/navBar'
import 'css/header.css'

Zauważ, że „components /” różni się od „../components/”

W ten sposób jest schludniej.

Ale jeśli chcesz zaimportować pliki w tym samym katalogu, możesz to również zrobić:

import logo from './logo.svg'
Michgolden Ukeje
źródło
-1

Sprawdź, czy są instrukcje importu, które powinny być zakończone średnikiem. Jeśli przegapisz jakiś, pojawi się ten błąd.

Sprawdź również, czy poniższe polecenie importu zostało dodane do twojego komponentu.

import {threadId} z 'worker_threads';

Jeśli tak, usuń tę linię. Mi to pasuje.

Saliya Wicky
źródło
-2

W moim przypadku zmieniam nazwę pliku składnika, kod VS dodaje dla mnie poniższy wiersz kodu:

import React, { Component } from "./node_modules/react";

Naprawiłem więc, usuwając: ./node_modules/

import React, { Component } from "react";

Twoje zdrowie!

Carlos A Avilez J.
źródło