React.jsでモジュール(見つかりません)を解決できません


97

明らかな質問をしているとは信じられませんが、それでもコンソールログにエラーが表示されます。

コンソールに、ディレクトリ内にモジュールが見つからないと表示されますが、タイプミスがないか少なくとも10回チェックしました。とにかく、これがコンポーネントコードです。

ルートにヘッダーをレンダリングしたい

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;

これはHeaderコンポーネントです

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

モジュールがこの場所./src/components/header/headerにあることを少なくとも10回確認しましたが、そうです(フォルダー「header」には「header.js」が含まれています)。

それでも、Reactはまだこのエラーをスローします:

コンパイルに失敗しました

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

npmテストは同じことを言います。


export default Header;「ヘッダーファイル」を追加する
Rui Costa

1
それでも動作しません。
ウラジミールヨバノビッチ

2
import Header from './components/header/header'srcなしが必要なようです。ファイルパスは、インポートするファイルパスを基準にしています。次に、メソッドHeaderからエクスポートしheader.jsて修正する必要がありますApp.render
Yury Tarabanko 2017年

componentsフォルダをフォルダから外に出すと、ファイルsrcを変更する必要があると表示されnode_modulesますが、これは私の注意ではありません。
ウラジミールヨバノビッチ2017年

8
何も動かす必要はありません。相対パスが正しくありません。'./src/app.js'内にインポートする場合はimport smth from './components/header/header'、この行import navBar from './src/components/header/navBar'でも同じである必要があります。現在のパスを基準にしている必要がありますimport navBar from './navBar'
Yury Tarabanko 2017年

回答:


130

私たちが通常使用する方法は、import相対パスに基づいています。

.そして..私たちが移動するために使用する方法と似ているterminalようなcd ..ディレクトリの外出するとmv ~/file .移動するためにfile、現在のディレクトリに。

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

あなたの場合、App.jssrc/ディレクトリにあり、header.jsはにありsrc/componentsます。importあなたのだろうimport Header from './components/header'。これは大まかに私の現在のディレクトリに変換され、ヘッダーファイルを含むコンポーネントフォルダを見つけます。

さて、からheader.js、あなたがからimport何かをする必要cardがあるなら、あなたはこれをするでしょう。import Card from '../containers/card'。これは、現在のディレクトリから移動して、カードファイルを含むフォルダ名コンテナを探すことを意味します。

import React, { Component } from 'react'これは始まらない./か、../または/そのためのノードがでモジュールを探し始めますnode_modulesまで、特定の順序でreact発見されました。詳細については、こちらをご覧ください


私の場合、欠落していたのは最初のドットスラッシュでした。ありがとう!
RichArt 2018

相対パスを正しく追加しました。しかし、最初の2つの点は、問題の解決に役立ちました。ありがとうございました。
サントッシュ

28

react-create-appを使用してアプリケーションを作成する場合は、環境変数を設定することを忘れないでください。

NODE_PATH=./src

または、.envファイルをルートフォルダに追加します。


1
これは私のために解決されたものです。私はシンプルを追加App.cssするsrc/としましたimport App.css。しかし、それは私に質問の誤りを与えました。この答えは問題を解決しました。
マクシミリアーノゲラ2018

9

NODE_PATH環境変数として追加すること.envは非推奨であり、、"baseUrl": "./src"compilerOptionsinjsconfig.jsonまたはに追加することで置き換えられtsconfig.jsonます。

参照



4

私の場合、エラーメッセージは

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

すべてが正しいディレクトリにあった間。

問題body.jsxbody.js解決するために名前を変更していることがわかりました。

だから私はこのコードを追加しwebpack.config.jsて解決しjsxましたjs

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

そして、ビルドエラーがなくなりました!


3

ヘッダーの二重使用だと思います。自分と同じようなことを試したところ、問題が発生しました。コンポーネントファイルを大文字にして他のファイルと一致させたところ、機能しました。

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

する必要があります

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

私は同じフォルダ構造を持っていて、やっていなかったので、これが私に答えを与えたのは嫌いです...私はそれらのちょっとした間違いには年を取りすぎ./components/header/headerてい./components/headerますlolol
クリス

1

同様の問題がありました。

原因:

import HomeComponent from "components/HomeComponent";

解決:

import HomeComponent from "./components/HomeComponent";

注: ./コンポーネントの前でした。使用方法については、上記の@ZacKwanの投稿を読むことができますimport


1

新しいreactアプリを作成したときに同じ問題に直面し、https://github.com/facebook/create-react-app/issues/2534ですべてのオプションを試しまし たが、役に立ちませんでした。新しいアプリのポートを変更する必要があり、それで機能しました。デフォルトでは、アプリはポート3000を使用します。次のようにpackage.jsonでポートを8001に変更しました。

  "scripts": {
    "start": "PORT=8001 react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

1

Reactアプリでモジュールのインポートを処理するためのより良い方法があります。これを行うことを検討してください:

jsconfig.jsonベースフォルダにファイルを追加します。これは、package.jsonを含む同じフォルダーです。次に、ベースURLのインポートを定義します。

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

これで、電話../../をかけるのではなく、代わりにこれを簡単に行うことができます。

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

'components /'は '../components/'とは異なることに注意してください

このようにすっきりしています。

ただし、同じディレクトリにファイルをインポートする場合は、次の方法も実行できます。

import logo from './logo.svg'

0

あなたがそれらのフォルダにいる、srcまたはpublicあなたがそれらのフォルダから出なければならない場合、あなたはプロジェクトフォルダにいる必要があります。あなたのreact-project名が 'hello-react'であると仮定しますcd hello-react


0

importHeaderを 'から変更する必要があります/ src / components / header / header 'から

' .. / src / components / header / header'からヘッダーをインポートします


0

appフォルダーで「npminstall」を実行してみてください。これも問題を解決する可能性があります。それは私のために働いた。


0

私は同じ問題に直面していて、それを解決しました。index.jsファイルがsrcフォルダー内にあるかどうかを確認し、インポートするファイルが何であれ、それを含むフォルダーもsrcフォルダー内にある必要があります。

つまり、コンポーネントフォルダーがフォルダーの外にある場合は、srcフォルダーのsrc外のファイルsrcはインポートされないため、エディターのフォルダー内にドラッグするだけです。

次に、./components/header/header(この場合) を使用してインポートできるようになります。ここに画像の説明を入力してください


-1

インポートステートメントを確認します。セミコロンで終了する必要があります。いずれかを見逃すと、このエラーが発生します。

また、次のインポートステートメントがコンポーネントに追加されているかどうかも確認してください。

import {threadId} from'worker_threads ';

その場合は、その行を削除します。わたしにはできる。


-1

私の場合、入力は正しいのですnpm startが、バグがある可能性があります(少なくとも、WindowsおよびLinuxのHyperターミナルで使用します)。ファイルを別のフォルダーに移動すると、npmstartはこれらの変更を認識しません。npmの開始プロセスをキャンセルし、移動し、保存してから実行するnpm start必要があります。ファイルが表示されます。


-2

私の場合、コンポーネントファイルの名前を変更し、VSCodeで次のコード行を追加します。

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

だから私は削除することで修正しました: ./node_modules/

import React, { Component } from "react";

乾杯!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.