Facebook提供了一个create-react-app
的命令来构建React应用程序。当我们运行npm run build
时,会在/build
文件夹中看到输出。
npm run build
将应用程序构建为生产模式并放置于构建文件夹中。它以生产模式正确地捆绑了React,并优化了构建以获得最佳性能。
构建已被缩小,并且包含哈希值的文件名。您的应用程序已准备好进行部署!
我们如何使用自定义文件夹代替/build
作为输出?谢谢。
Facebook提供了一个create-react-app
的命令来构建React应用程序。当我们运行npm run build
时,会在/build
文件夹中看到输出。
npm run build
将应用程序构建为生产模式并放置于构建文件夹中。它以生产模式正确地捆绑了React,并优化了构建以获得最佳性能。
构建已被缩小,并且包含哈希值的文件名。您的应用程序已准备好进行部署!
我们如何使用自定义文件夹代替/build
作为输出?谢谢。
从 react-scripts >= 4.0.2
版本开始,这个功能被官方支持了:官方文档
Create React App 默认会将编译的文件输出到与
/src
相邻的/build
目录下。你可以使用这个变量来指定 Create React App 输出的目标路径。要相对于项目根目录指定BUILD_PATH
。
// package.json
"scripts": {
"build": "BUILD_PATH='./dist' react-scripts build",
// ...
},
或者在您项目的根目录中添加一个 .env 文件:
# .env
BUILD_PATH='./dist'
注意:在BUILD_PATH
中指定的路径将被无情清除。请仔细检查您的环境变量是否正确指定,特别是在使用持续集成时。
BUILD_PATH ='..'
会对我在项目上所做的工作造成严重破坏(包括删除git)。 - barshopen"build": "set BUILD_PATH=../wwwroot/clientapp && react-scripts build"
- Dan编辑你的 package.json 文件:
"build": "react-scripts build && mv build webapp"
"build": "react-scripts build && rm -rf docs && mv build docs"
进行翻译。这段代码的意思是,在运行React应用时,需要先执行构建命令 react-scripts build
,然后删除名为 docs
的文件夹(如果存在),最后将构建好的文件移动到名为 docs
的文件夹中。这样做是为了确保构建的文件能够正确地被覆盖而不是被添加到已有的文件夹中。 - TimoSolomv build webapp = xcopy /E /H /C /I build webapp
。 - Taha Farooqui"build": "react-scripts build && RMDIR /S /Q webapp && move build webapp"
。 - Sergio Gutiérreznpm i --save-dev cross-env
安装一个名为cross-env的npm包。然后,在您的package.json文件中添加以下代码:"build": "cross-env react-scripts build && mv build webapp"
- Nikhil Sinha创建React应用程序2+版本的解决方案
对于最近(> v2)的create-react-app版本(以及可能较旧的版本),请将以下行添加到您的package.json,然后重新构建。
"homepage": "./"
现在您应该看到build/index.html将具有相对链接./static/...
,而不是指向服务器根目录的链接:/static/...
编辑:可配置的BUILD_PATH
支持已经在v4.0.2中实现。请参见t_dom93的答案。
当前配置选项无法更改构建输出文件夹名称。
此外,您也不应该这样做。这是create-react-app哲学的一部分:他们说约定优于配置。
如果您真的需要重命名文件夹,我看到了两个选择:
在构建过程完成后,编写一个复制构建文件夹内容到您想要的另一个文件夹的命令。例如,您可以尝试使用copyfiles
npm软件包或类似的软件包。
您可以尝试弹出 create-react-app并调整配置。
如果您对构建工具和配置选项不满意,可以随时弹出。此命令将从项目中删除单个构建依赖项。
相反,它将把所有配置文件和传递依赖项(Webpack、Babel、ESLint等)直接复制到您的项目中,因此您可以完全控制它们。除弹出以外的所有命令仍将起作用,但它们将指向复制的脚本,以便您可以进行微调。此时,您将独自操作。
但是,请注意:这是单向操作。一旦您弹出,就无法回退!您将失去所有未来的更新。
因此,如果可能的话,我建议您不要使用自定义文件夹命名。尽量使用默认命名方式。如果不能使用默认命名,尝试使用#1。如果在特定情况下仍然无法使用,且已经没有其他选项 - 尝试探索#2。祝你好运!v4.0.2
中发布。工作示例:https://dev59.com/v1gR5IYBdhLWcg3wT7tL#66036117 - t_dom93v4.0.2
上实施了它。 - Coal刚刚在v4.0.2版本中加入了对BUILD_PATH
的支持。
将BUILD_PATH
变量添加到.env
文件中,并运行build
脚本命令:
// .env file
BUILD_PATH=foo
这将把所有构建文件放入foo
文件夹中。
Félix的回答是正确并且被点赞的,而且是由Dan Abramov本人支持的。
但是对于那些想要改变输出结构本身的人(在build
文件夹中),可以使用postbuild
运行后续命令,该命令会自动运行在package.json
文件中定义的build
脚本之后。
下面的示例将其从static/
更改为user/static/
,移动文件并在相关文件上更新文件引用(完整的依赖项在此处):
package.json
{
"name": "your-project",
"version": "0.0.1",
[...]
"scripts": {
"build": "react-scripts build",
"postbuild": "./postbuild.sh",
[...]
},
}
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
build
文件夹,然后再移动/重命名它。 - Greg K我有一个场景,想要重命名文件夹并更改构建输出位置,在 package.json 中使用了以下代码,使用的是最新版本。
"build": "react-scripts build && mv build ../my_bundles"
build
目录下的内容复制到 docs
目录中,以便在 GitHub Pages 上进行托管。最终选择了以下代码:`"build-docs": "react-scripts build && cp -r build/** docs"`
- ipatchBUILD_PATH=$npm_package_name-$npm_package_version
构建路径将是 "应用名称"-"版本号"
这些值可以在 package.json 中设置。
{
"name": "my-app",
"version": "0.1.2",
...
}
在Windows系统中,移动命令对我来说并不起作用,因为它无法复制“static”文件夹及其子文件夹。因此,我解决了这个问题,使用了'ROBOCOPY'。
"build": "react-scripts build && ROBOCOPY build ../my-relative-path/react-app /E",
使用 cross-env 是解决方案。
安装 cross-env:
npm install cross-env
您应更新到:
"scripts": {
"build": "cross-env BUILD_PATH='../yourCustomBuildFolder' react-scripts build",
}