Facebookはcreate-react-app
command を提供して、反応するアプリを構築します。 npm run build
を実行すると、/build
フォルダーに出力が表示されます。
npm run build
本番用のアプリをビルドフォルダーにビルドします。プロダクションモードでReactを正しくバンドルし、最高のパフォーマンスを得るためにビルドを最適化します。
ビルドは縮小され、ファイル名にはハッシュが含まれます。アプリをデプロイする準備ができました!
出力に/build
の代わりにカスタムフォルダーを使用するにはどうすればよいですか?ありがとう。
現在の構成オプションでビルド出力フォルダー名を変更することはできません。
また、すべきではありません。これは react-create-app
の背後にある哲学 の一部です:彼らはConvention over Configurationと言います。
本当にフォルダの名前を変更する必要がある場合、2つのオプションが表示されます。
ビルドプロセスが終了した直後に、ビルドフォルダーの内容を別のフォルダーにコピーするコマンドを作成します。たとえば、 copyfiles
npmパッケージを試してください 、または同様のことができます。
eject-create-app を試し、設定を微調整することができます。
ビルドツールと構成の選択に満足できない場合は、いつでも取り出すことができます。このコマンドは、プロジェクトから単一のビルド依存関係を削除します。
代わりに、すべての構成ファイルと推移的な依存関係(Webpack、Babel、ESLintなど)をプロジェクトに直接コピーして、それらを完全に制御できるようにします。取り出しを除くすべてのコマンドは引き続き機能しますが、コピーされたスクリプトを指すので、微調整できます。この時点で、あなたは一人でいます。
ただし、これは一方向の操作であることに注意することが重要です。一度取り出したら、戻ることはできません!今後の更新はすべて失います。
したがって、可能であれば、カスタムフォルダの命名を使用しないことをお勧めします。デフォルトの命名法に固執するようにしてください。オプションでない場合は、#1を試してください。それでも特定のユースケースで機能せず、本当に選択肢が足りない場合は、#2をご覧ください。幸運を!
Package.jsonを編集します。
"build": "react-scripts build && mv build webapp"
Create-react-appバージョン2+回答
Create-react-appの最近の(> v2)バージョン(および可能性のある古いバージョン)の場合、次の行をpackage.jsonに追加してから再構築します。
"homepage": "./"
これで、build/index.htmlにサーバールート./static/...
へのリンクではなく、相対リンク/static/...
が表示されるはずです。
フェリックスの答えは正解であり、賛成です。 Dan Abramov自身 によってバックアップされています。
ただし、出力自体の構造(build
フォルダー内)を変更する場合は、postbuild
の後に自動的に実行されるbuild
を使用してビルド後のコマンドを実行できます。 ] _スクリプトはpackage.json
ファイルで定義されています。
以下の例では、static/
からuser/static/
に変更し、関連するファイルのファイルを移動してファイル参照を更新します( full Gist here ):
{
"name": "your-project",
"version": "0.0.1",
[...]
"scripts": {
"build": "react-scripts build",
"postbuild": "./postbuild.sh",
[...]
},
}
#!/bin/bash
# The purpose of this script is to do things with files generated by
# 'create-react-app' after 'build' is run.
# 1. Move files to a new directory called 'user'
# The resulting structure is 'build/user/static/<etc>'
# 2. Update reference on generated files from
# static/<etc>
# to
# user/static/<etc>
#
# More details on: https://github.com/facebook/create-react-app/issues/3824
# Browse into './build/' directory
cd build
# Create './user/' directory
echo '1/4 Create "user" directory'
mkdir user
# Find all files, excluding (through 'grep'):
# - '.',
# - the newly created directory './user/'
# - all content for the directory'./static/'
# Move all matches to the directory './user/'
echo '2/4 Move relevant files'
find . | grep -Ev '^.$|^.\/user$|^.\/static\/.+' | xargs -I{} mv -v {} user
# Browse into './user/' directory
cd user
# Find all files within the folder (not subfolders)
# Replace string 'static/' with 'user/static/' on all files that match the 'find'
# ('sed' requires one to create backup files on OSX, so we do that)
echo '3/4 Replace file references'
find . -type f -maxdepth 1 | LC_ALL=C xargs -I{} sed -i.backup -e 's,static/,user/static/,g' {}
# Delete '*.backup' files created in the last process
echo '4/4 Clean up'
find . -name '*.backup' -type f -delete
# Done
Ben Carp および WallaceSidhrée による回答に基づく:
これは、ビルドフォルダー全体をwampパブリックフォルダーにコピーするために使用します。
package.json
{
"name": "[your project name]",
"homepage": "http://localhost/[your project name]/",
"version": "0.0.1",
[...]
"scripts": {
"build": "react-scripts build",
"postbuild": "@powershell -NoProfile -ExecutionPolicy Unrestricted -Command ./post_build.ps1",
[...]
},
}
post_build.ps1
Copy-Item "./build/*" -Destination "C:/wamp64/www/[your project name]" -Recurse -force
ホームページ行は、サーバーのサブフォルダーに展開する場合にのみ必要です( この回答 別の質問から参照)。
//package.json
"scripts": {
"postbuildNamingScript": "@powershell -NoProfile -ExecutionPolicy Unrestricted -Command ./powerShellPostBuildScript.ps1",
// powerShellPostBuildScript.ps1
move build/static/js build/new-folder-name
(Get-Content build/index.html).replace('static/js', 'new-folder-name') | Set-Content
build/index.html
"Finished Running BuildScript"
PowerShellでnpm run postbuildNamingScript
を実行すると、JSファイルが 'build/new-folder-name'に移動し、HTMLから新しい場所をポイントします。
フォルダーの名前を変更してビルドの出力場所を変更したいというシナリオがあり、最新バージョンのpackage.jsonのコードの下で使用しました
"build": "react-scripts build && mv build ../my_bundles"、
アプリケーションのソース内でコマンドプロンプトを開きます。コマンドを実行する
npm run eject
scripts/build.jsファイルを開き、「use strict」行の後にファイルの先頭に追加します
'use strict';
....
process.env.PUBLIC_URL = './'
// Provide the current path
.....
config/paths.jsを開き、エクスポートオブジェクトのbuildAppプロパティを宛先フォルダーに変更します。 (ここでは、 'react-app-scss'を宛先フォルダーとして提供しています)
module.exports = {
.....
appBuild: resolveApp('build/react-app-scss'),
.....
}
走る
npm run build
注:プラットフォーム依存スクリプトの実行はお勧めできません
ルートディレクトリの下で、ちょっとしたハックで設定を更新できます。
--your directory of choice--をビルドするフォルダーディレクトリに置き換えます
指定したパスは少し汚れている可能性がありますが、構成を変更するために必要なことはこれだけです。