ビルド環境の構成に基づいて、<base href=""/>
タグのhref値を設定する必要があります。
例えば:
ステージングには<base href="/staging" />
が必要です
製品には<base href="/" />
が必要です
現在の設定:
ビルドコマンド:
"build": "sh -ac '. .env.${REACT_APP_ENV}; react-scripts build'",
"build:staging": "REACT_APP_ENV=staging npm run build",
"build:prod": "REACT_APP_ENV=production npm run build",
.env.staging.js:
REACT_APP_BASE_HREF=/staging
index.html:
....
<base href="" + process.env.REACT_APP_API_URL />
....
これはindex.htmlでは機能しないようです。同様の設定はJSファイルでも機能しますが
(おそらく、JSファイルが解析されて単一のファイルにバンドルされ、バンドラーがその時点で値を読み取るためです)
試したこと:
index.html:
<base href=process.env.REACT_APP_API_URL />
<base href="process.env.REACT_APP_API_URL" />
<base href="%process.env.REACT_APP_API_URL%" />
(PUBLIC_URL変数と同様)
ブラウザルーターと一緒にbasenameプロパティを設定しても、問題は解決しません。
この問題は解決されました。次の手順を実行します:
homepage
キーを""
に設定しますPUBLIC_URL=/survey
を設定します<base href>
を使用する必要はありません。 HTMLファイルから削除できますスタイルシートのリンクをに変更します
<link rel="stylesheet" href="%PUBLIC_URL%/vendor/bootstrap/css/bootstrap.min.css">
Process.envを追加する必要はありません
できるよ:
<base href="%PUBLIC_URL%/"> <!-- Note the slash at the end -->
PUBLIC_URL
は、process.env
からアクセスできる環境変数です。PUBLIC_URL
またはexport PUBLIC_URL=/subdir
で.env
env変数を設定できます(create-react-appをチェックしてください。内部でdotenvを使用します)。package.json
のhomepage
を/subdir
に設定することもできます。これも機能します。PUBLIC_URL
が設定されていない場合、ホームページの値を取得しています。index.html内のリンクにプレフィックスを付けるだけでよい場合は、ベースタグは必要ありません。ベースタグは、たとえば画像リンクに役立ちます。コンポーネント内にあるもの:
domain.com/
でアプリを提供する場合は、次のことができます。
<img src="/assets/duck.jpg" />
代わりに、domain.com/subdir/
でアプリを提供する場合は、次のことができます。
<img src="/subdir/assets/duck.jpg" />
または、上記のようにベースタグを設定した場合:
<img src="assets/duck.jpg" /> <!-- Base tag only work with relative paths, same as ./assets/duck.jpg -->
上記に注意してください:src="assets/duck.jpg"
はフロントページ(/subdir
)withoutベースタグ!画像のパスは、現在のパスを基準にしています。つまり、/subdir/some-route
では、Webブラウザはサーバー上の/subdir/some-route/assets/duck.jpg
で、ベースタグなしで検索されます。ベースタグを使用すると、任意のルートに移動できます。各画像のsrcパスは、現在のパスを無視し、ベースタグのhrefprop値から開始します。
scss(sass)ファイルにbackground-image
がある場合は、次のようにhtmlに移動することをお勧めします。
<section style={{backgroundImage: `url('assets/background-form.jpg')`}}>
...
私にとってのSassは、上記の相対パスでコンパイルしていませんでした。また、アセットフォルダー../../public/assets/background-form.jpg
への相対パスを作成することもできますが、ModuleScopePlugin
フォルダーの外部に相対パスをリンクすることを禁止する特別な制限src
のため、失敗します( ここ を参照してください。