カスタムPUBLIC_URLでCreate React Appをビルドする
Japanese Explanation of "Can't build create-react-app project with custom PUBLIC_URL"
問題
create-react-app
でカスタムのPUBLIC_URL
を設定してビルドできないというエラーが発生しています。
原因
PUBLIC_URL
は、ビルド後のアプリケーションのルートURLを指定するための環境変数です。しかし、create-react-app
のデフォルト設定では、PUBLIC_URL
を直接変更することはできません。
解決方法
-
package.jsonファイルのscriptsオブジェクトを編集
start
スクリプトにBROWSER_RUNTIME=none
を追加します。
"scripts": { "start": "react-scripts start --BROWSER_RUNTIME=none", "build": "react-scripts build --BROWSER_RUNTIME=none" }
-
public/index.htmlファイルの<base href>タグを変更
PUBLIC_URL
に設定したい値を<base href>
タグのhref
属性に指定します。
<base href="https://your-custom-url.com/" />
<base href>
タグは、ブラウザにアプリケーションのルートURLを指定し、相対パスを絶対パスに変換するために使用されます。BROWSER_RUNTIME=none
オプションは、ブラウザのデフォルトの履歴APIを使用せずに、カスタムの履歴管理を実装することを示します。
例
カスタムのPUBLIC_URL
をhttps://example.com/my-app/
に設定する場合:
-
"scripts": { "start": "react-scripts start --BROWSER_RUNTIME=none", "build": "react-scripts build --BROWSER_RUNTIME=none" }
-
<base href="https://example.com/my-app/" />
日本語でのコード例解説
"scripts": {
"start": "react-scripts start --BROWSER_RUNTIME=none",
"build": "react-scripts build --BROWSER_RUNTIME=none"
}
<base href="https://your-custom-url.com/" />
"scripts": {
"start": "react-scripts start --BROWSER_RUNTIME=none",
"build": "react-scripts build --BROWSER_RUNTIME=none"
}
<base href="https://example.com/my-app/" />
解説
<base href>
タグは、ブラウザにアプリケーションのルートURLを指定します。public/index.html
ファイルは、プロジェクトのHTMLファイルです。build
スクリプトは、プロジェクトをビルドします。start
スクリプトは、開発サーバーを起動します。package.json
ファイルのscripts
オブジェクトは、プロジェクトのスクリプトを定義します。
日本語での代替方法解説
代替方法
react-scriptsの直接使用:
react-scripts
のドキュメントを参照して、PUBLIC_URL
の設定方法を確認してください。create-react-app
の内部で使用するreact-scripts
パッケージを直接使用することで、より柔軟な設定が可能になります。
cracoの使用:
craco
は、create-react-app
のカスタム設定を可能にするツールです。
viteの使用:
vite
は、新しい世代のフロントエンドビルドツールです。
- それぞれの方法には独自の利点と欠点がありますので、プロジェクトの要件に合わせて適切な方法を選択してください。
- これらの代替方法を使用することで、
create-react-app
のデフォルト設定に縛られずに、より柔軟なプロジェクト構成が可能になります。
例
craco
を使用してカスタムのPUBLIC_URL
を設定する場合:
-
craco
をインストール:npm install --save-dev craco
-
craco.config.js
ファイルを作成:module.exports = { webpack: { configure: (webpackConfig) => { webpackConfig.output.publicPath = 'https://your-custom-url.com/'; return webpackConfig; } } };
-
"scripts": { "start": "craco start", "build": "craco build" }
javascript reactjs create-react-app