私はしようとしています
PUBLIC_URL=http://xxxx.com npm run build
最新のcreate-react-scriptを使用してビルドされたプロジェクトで。
ただし、%PUBLIC_URL%
内のpublic/index.html
の出現は、期待値PUBLIC_URL
ではなく、空の文字列に置き換えられます。
public/index.html
には次のようなコードが含まれます
<script src="%PUBLIC_URL%/static/js/jarvis.widget.min.js"></script>
インターネット検索とスタックオーバーフローの時間は、PUBLIC_URL
についてほとんど書かれていないことを示しています。 GitHubからcreate-react-appを複製し、コードを閲覧していますが、まだ啓発されていません。
誰が私が間違っているのかについての提案はありますか?
他の回答がうまく機能しない場合は、package.json
にhomepage
フィールドもあります。 npm run build
を実行すると、次のようなメッセージが表示されます。
The project was built assuming it is hosted at the server root.
To override this, specify the homepage in your package.json.
For example, add this to build it for GitHub Pages:
"homepage" : "http://myname.github.io/myapp",
package.json
のルートフィールドの1つとして追加するだけです。
{
// ...
"scripts": {
// ...
},
"homepage": "https://example.com"
}
homepage
またはPUBLIC_URL
で正常に設定されると、代わりに次のようなメッセージが表示されます。
The project was built assuming it is hosted at https://example.com.
You can control this with the homepage field in your package.json.
これはPUBLIC_URL変数の使用方法ではありません。 ドキュメント に従って、HTMLでPUBLIC_URLを使用できます。
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
またはJavaScriptで:
render() {
// Note: this is an escape hatch and should be used sparingly!
// Normally we recommend using `import` for getting asset URLs
// as described in “Adding Images and Fonts” above this section.
return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;
}
PUBLIC_URLは、選択した値に設定するものではなく、Webpackのビルドシステム外のデプロイメントにファイルを保存する方法です。
これを表示するには、CRAアプリを実行して、これをsrc/index.js
ファイルに追加します。
console.log('public url: ', process.env.PUBLIC_URL)
URLが既に存在することがわかります。
詳細は CRA docs をご覧ください。
ビルドで次のようなものを探している私のような人々:
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
https://dsomething.cloudfront.net
でpackage.json
をhomepage
に設定しても機能しません。
次のようにプロジェクトをビルドします。
(windows)
set PUBLIC_URL=https://dsomething.cloudfront.net&&npm run build`
(Linux)
PUBLIC_URL=https://dsomething.cloudfront.net npm run build
(マック)
- わからない -
そして、あなたは得るでしょう
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
あなたの構築されたindex.htmlで
プロジェクトのルート(package.jsonがある場所)に.env
というファイルを作成します。
このファイルに次のように記述します(URLの前後に引用符はありません):
PUBLIC_URL=https://dsomething.cloudfront.net
通常どおりプロジェクトをビルドします(npm run build
)
これにより、index.htmlも生成されます。
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
これをpackage.jsonに追加します
"homepage": " http://://dsomething.cloudfront.net "、
次に、index.htmlが生成されます:
<script type="text/javascript" src="//dsomething.cloudfront.net/static/js/main.ec7f8972.js">
これは基本的に次と同じです:
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
私の理解で。
ドキュメント をご覧ください。 PUBLIC_URLを取得する.envファイルを持つことができます
あなたはそれが何のために使われたことを覚えておくべきですが-
この変数を使用して、指定したURL(ホスト名を含む)に対してアセットを逐語的に参照させることができます。これは、CDNを使用してアプリケーションをホストする場合に特に便利です。
実際、環境変数の設定方法はオペレーティングシステムによって異なります。
set PUBLIC_URL=http://xxxx.com&&npm start
(注:空白の欠如は意図的なものです。)
PUBLIC_URL=http://xxxx.com npm start
cross-env
{
"scripts": {
"build": "cross-env PUBLIC_URL=http://xxxx.com npm start"
}
}
あなたが間違っているのは、PUBLIC_URLとprocess.env.PUBLIC_URLが同じ値を持つことを期待することです。
create-react-appには2つの異なるPUBLIC_URLがあります。
プロセス環境PUBLIC_URLは、package.jsonホームページをオーバーライドします。スキーム、ホスト、パスを含む完全なURLにすることができます。ホストを使用して、正しい展開手順を示します。
Process.env.PUBLIC_URLは、プロセス環境PUBLIC_URLまたはホームページからのパスのみです。
したがって、実行すると
PUBLIC_URL=http://example.com npm run build
Reactには、
process.env.PUBLIC_URL === ''
あなたが持っていた場合
PUBLIC_URL=http://example.com/foo npm run build
Reactには
process.env.PUBLIC_URL === '/foo'
設定できない理由がわかりません。 source では、PUBLIC_URL
はhomepage
よりも優先されます
const envPublicUrl = process.env.PUBLIC_URL;
...
const getPublicUrl = appPackageJson =>
envPublicUrl || require(appPackageJson).homepage;
コードにブレークポイントを設定して、環境変数をオーバーライドしているロジックを確認してください。
この問題は、githubページで反応アプリをホストしようとすると明らかになります。
これを修正した方法、
app.tsx
というメインアプリケーションファイルで、ルーターを含めます。ベース名を設定します。たとえば、<BrowserRouter basename="/Seans-TypeScript-ReactJS-Redux-Boilerplate/">
相対URLであることに注意してください。これにより、ローカルで実行され、ホストされる機能が完全に簡素化されます。 basename値は、GitHubのリポジトリタイトルと一致します。これは、GitHubページが自動作成するパスです。
それが私がする必要があるすべてです。
GitHubページでホストされている作業例を参照してください
https://sean-bradley.github.io/Seans-TypeScript-ReactJS-Redux-Boilerplate/
ここに記載 create-react-appはREACT_APP_
で始まる環境変数のみをインポートするため、PUBLIC_URL
は@redbmkで述べたように、homepage
package.json
ファイルの設定。