[解決済み] エラーです。Uncaught ReferenceError: Reactは定義されていません。
質問
概要
BabelとWebpackを使って、Reactアプリを作ろうとしています。この場合
create-react-app
が、これらの技術がどのように連携できるのか、自分で勉強してみたいです。
を実行すると
yarn run start
または
yarn run build
(参照
パッケージ.json
Webpack はバンドルが正常にビルドされたことを報告します。ブラウザでアプリケーションを実行すると
Uncaught ReferenceError: React is not defined
というエラーが発生します。
この同じエラーに関する質問がSOにいくつもありますが、どの解決策もまだ私の問題を解決していません。
質問内容
React、Babel、Webpackをうまく連携させるために足りないものは何ですか?
コード
パッケージ.json
{
"private": true,
"scripts": {
"build": "webpack",
"start": "webpack-dev-server"
},
"dependencies": {
"react": "^15.4.1",
"react-dom": "^15.4.1",
"react-redux": "^5.0.1",
"redux": "^3.6.0"
},
"devDependencies": {
"babel-core": "^6.21.0",
"babel-loader": "^6.2.10",
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.16.0",
"redux-devtools": "^3.3.1",
"webpack": "^1.14.0",
"webpack-dev-server": "^1.16.2"
}
}
.babelrc
{
"presets": ["react", "es2015"]
}
webpack.config.js
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: './dist'
},
devtool: 'source-map',
debug: true,
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<div id="root"></div>
<script src="dist/bundle.js"></script>
</body>
</html>
src/index.js
import ReactDom from 'react-dom';
import React from 'react';
import App from './App';
ReactDom.render(
<App />,
document.getElementById('root'),
);
src/App.js
import React from 'react';
import { Component } from 'react';
export default class App extends Component {
render() {
return (
<h1>hello</h1>
);
}
}
観察記録
-
どうやらWebpack/Babelが期待しているのは
React
がグローバルスコープで使用可能であるか、あるいは私のimport React from 'react';
ステートメントを使用します。 -
また、まだ適切な呪文である
devtools
とdebug
プロパティをWebpackの設定に追加して、実際にソースマップを動作させることができました。コンパイルされた出力にはまだ表示されていません。
EDIT
壊れた bundle.js はSOでは大きすぎる(21,000行以上)ので、ここにリンクを貼っておきます。 http://chopapp.com/#1a8udqpj - は、読み込みと表示に数秒かかります。
解決するには?
次のような意見を述べたいと思います。まず、devToolsとdebugに関するあなたの質問について。webpack の debug フラグ (彼らの 公式ドキュメント ) ローダーをデバッグモードに切り替えます。それから、私が理解したところでは、webpackは、開発環境で実行されている場合、実際にはコードをハードファイルにコンパイルせず、メモリに保持します。したがって、ソースマップもメモリ上に保持され、ブラウザにリンクされます。ブラウザの開発ツールを開いてソースを表示すると、その効果を確認することができます。
さて、開発サーバーが正しく設定されていると仮定すると、index.htmlはソースディレクトリに置かれているものとします。もしそうなら、スクリプトの参照先は 'dist/bundle.js' ではなく '/bundle.js' であるべきで、物理的な "dist" フォルダが存在しないかもしれないからです。
また、webpack.config.js のエントリポイントから ".js" を削除することをお勧めします。
関連
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】React.jsの配列の子要素のユニークキーを理解する
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptで変数が存在するか(定義されているか/初期化されているか)をチェックする
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Babel 6 regeneratorRuntimeが定義されていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー