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.


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 .


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;


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



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!


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';

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


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"
  },

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


0

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

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


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.


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


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'

-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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.