この記事は公開から2年以上経過しています。
VSCodeでcreate-react-app
を使わずにNode.js(npm)を使った最小構成のReactアプリケーションを作成し、VSCodeでクライアントサイドデバッグを行う方法。
予めNode.jsをインストールしておく必要があります。
本例はLinux環境での説明となります。MacやWindowsでも基本は同様ですが、シェルコマンドの動作やパスの指定などが変わるものもあるため、適宜読み替えが必要です。
Reactプロジェクトの作成手順
-
ターミナルを開き、以下のコマンドでプロジェクトルートディレクトリ
react_test_220102
を作成してVSCodeで開く。mkdir react_test_220102 && code $_
※Windowsの場合は
$_
を使えないためcode react_test_220102
のようにパスを明示。 -
VSCodeのターミナルを開き、以下のコマンドで
package.json
を新規作成する。
※以降の手順のコマンドは全てVSCodeのターミナル上(カレントディレクトリはreact_test_220102
)で実行します。npm init -y
-
以下のコマンドを実行して、reactのライブラリ群をインストール。
npm i react react-dom
-
以下のコマンドを実行して、今回の開発に必要な
webpack
やbabel
のツール群をインストールする。npm i -D webpack webpack-cli html-webpack-plugin @babel/core @babel/preset-env @babel/preset-react babel-loader
この時点のpackage.jsonの内容は、以下のとおり(パッケージバージョンは当時のもの)。
{ "name": "react_test_220102", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "react": "^17.0.2", "react-dom": "^17.0.2" }, "devDependencies": { "@babel/core": "^7.16.7", "@babel/preset-env": "^7.16.7", "@babel/preset-react": "^7.16.7", "babel-loader": "^8.2.3", "html-webpack-plugin": "^5.5.0", "webpack": "^5.65.0", "webpack-cli": "^4.9.1" } }
-
以下のコマンドを実行してプロジェクトルートディレクトリ直下に
src
ディレクトリを作成、その中に空のindex.html
/index.js
ファイルを作成する。mkdir src && cd $_ touch index.html touch index.js
※Windowsの場合は
$_
を使えないためcd src
のようにパスを明示。
※Windowsの場合はtouch
を使えないためcopy nul index.html
のようにcopy nul
で代替。 -
VSCodeのエクスプローラツリーから手順5で作成した
src/index.html
を選択して、以下の内容で登録する。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Hello React!</title> </head> <body> <div id="root"></div> </body> </html>
-
VSCodeのエクスプローラツリーから手順5で作成した
src/index.js
を選択して、以下の内容で登録する。import React from 'react'; import ReactDOM from 'react-dom'; class HelloReact extends React.Component { render() { return <h1>Hello React!</h1>; } } ReactDOM.render(<HelloReact />, document.getElementById('root'));
※react-create-appの動作に合わせてクラスコンポーネントを利用していますが、関数コンポーネントでも構いません。
-
以下のコマンドでプロジェクトルートディレクトリに空の
webpack.config.js
を作成する。cd ../ touch webpack.config.js
※Windowsの場合は
touch
を使えないためcopy nul webpack.config.js
のようにcopy nul
で代替。 -
VSCodeのエクスプローラツリーから手順8で作成した
webpack.config.js
を選択して、以下の内容で登録する。const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist/'), publicPath: './', filename: 'index.js', }, module: { rules: [ { test: /\.(js|jsx)$/, use: [ { loader: 'babel-loader', options: { presets: ['@babel/preset-env', '@babel/preset-react'], }, }, ], exclude: /node_modules/, }, ], }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', filename: 'index.html', }), ], resolve: { extensions: ['.js', '.jsx'], }, devtool: 'source-map', };
-
VSCodeのエクスプローラツリーから
package.json
を選択して、scripts
エントリ部分を以下のように書き換える(test
を削除してdev
とbuild
を追加)。{ "name": "react_test_220102", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "dev": "webpack --progress --mode development --watch", "build": "webpack --progress --mode production" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "react": "^17.0.2", "react-dom": "^17.0.2" }, "devDependencies": { "@babel/core": "^7.16.7", "@babel/preset-env": "^7.16.7", "@babel/preset-react": "^7.16.7", "babel-loader": "^8.2.3", "html-webpack-plugin": "^5.5.0", "webpack": "^5.65.0", "webpack-cli": "^4.9.1" } }
-
以下のコマンドでsrcディレクトリのHTMLファイルとJavaScriptファイルのコンパイルを行う。
npm run dev
実行結果は以下のとおり。
> react_test_220102@1.0.0 dev > webpack --progress --mode development --watch asset index.js 982 KiB [compared for emit] (name: main) 1 related asset asset index.html 331 bytes [compared for emit] runtime modules 274 bytes 1 module modules by path ./node_modules/ 974 KiB modules by path ./node_modules/scheduler/ 26.3 KiB modules by path ./node_modules/scheduler/*.js 412 bytes 2 modules modules by path ./node_modules/scheduler/cjs/*.js 25.9 KiB ./node_modules/scheduler/cjs/scheduler.development.js 17.2 KiB [built] [code generated] ./node_modules/scheduler/cjs/scheduler-tracing.development.js 8.79 KiB [built] [code generated] modules by path ./node_modules/react/ 70.6 KiB ./node_modules/react/index.js 190 bytes [built] [code generated] ./node_modules/react/cjs/react.development.js 70.5 KiB [built] [code generated] modules by path ./node_modules/react-dom/ 875 KiB ./node_modules/react-dom/index.js 1.33 KiB [built] [code generated] ./node_modules/react-dom/cjs/react-dom.development.js 874 KiB [built] [code generated] ./node_modules/object-assign/index.js 2.06 KiB [built] [code generated] ./src/index.js 3.69 KiB [built] [code generated] webpack 5.65.0 compiled successfully in 1060 ms
コンパイルが正常完了すると、プロジェクトルートディレクトリ直下の
dist
ディレクトリ配下に、コンパイル後のindex.html
、index.js
とソースマップファイルindex.js.map
が出力される。
以上でReactのプロジェクト作成は完了です。
dist/index.html
を任意のブラウザで開くと、下図のようにReactでコンテンツ領域に動的に生成されたHello React!
が表示されることが確認できます。
生のソース:
Reactで動的生成されたソース:
Reactアプリのローカルデバッグ手順
前項の手順で作成したReactアプリケーションのデバッグ方法です。
-
VSCodeのサイドバーから
Run and Debug(実行とデバッグ)
を選択する。 -
create a launch.json file(launch.jsonファイルを作成します)
をクリック、Select environment(環境の選択)
からChrome
を選択する。 -
VSCodeのエクスプローラツリーから
.vscode/launch.json
を選択して、configurations
エントリを以下のように設定する。
※runtimeExecutable
には、デバッグで利用するChromiumベースのWEBブラウザの実行ファイルパスをフルパスで指定してください。macOSをお使いの場合はこちらのエントリが参考になるかもしれません。{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "pwa-chrome", "request": "launch", "name": "Open index.html", "file": "./dist/index.html", "runtimeExecutable": "/usr/bin/chromium" } ] }
-
VSCodeのエクスプローラツリーから
src/index.js
ファイルを開き、以下のとおりブレークポイントを設定する。 -
VSCodeで
F5
キーを押下してデバッグを開始する。上図のとおりブレークポイントでブレークし、VSCodeデバッガによるデバッグが行えることが確認できます。
以上です。