在开发过程中,我希望能够从Web上看到构建信息(git提交哈希,作者,最后提交消息等)。我试过:
- 使用child_process执行git命令行,并读取结果(由于浏览器环境,无法工作)
- 在
npm build
期间生成buildInfo.txt文件并从文件中读取(不工作,因为fs在浏览器环境中也不可用) - 使用外部库,如“git-rev”
剩下唯一要做的事情似乎是执行npm run eject
并应用https://www.npmjs.com/package/git-revision-webpack-plugin,但我真的不想退出create-react-app。有人有什么主意吗?
8条答案
按热度按时间vuktfyat1#
稍微偏离一下(不需要弹出,并且可以在开发中工作),这可能有助于其他人将他们当前的git commit SHA作为元标签添加到他们的index.html中:
添加到package.json中的构建脚本中,然后添加(注意它必须以REACT_APP开始...否则将被忽略):
到公用文件夹中的index.html。
在react组件中,这样做:
p8h8hvxi2#
受Yifei Xu的响应启发,我创建了另一个选项,该选项利用es6模块和create-react-app。此选项创建一个JavaScript文件并将其作为构建文件中的常量导入。虽然将其作为文本文件使其易于更新,但此选项可确保它是打包到JavaScript包中的js文件。此文件的名称为_git_commit. js
package.json脚本:
使用此提交消息的示例组件:
请注意,这将自动将您的提交消息放入JavaScript包中,因此请确保提交消息中没有输入任何安全信息。我还将created_git_commit. js添加到.gitignore中,这样它就不会被检入(并创建了一个疯狂的git提交循环)。
11dmarpk3#
在没有
eject
ing的情况下是不可能做到这一点的,直到Create React App 2.0(Release Notes)带来了在编译时运行的Babel插件宏的自动配置。为了让每个人的工作更简单,我写了一个宏,并发布了一个NPM包,你可以导入它来获取Git信息到你的React页面中:https://www.npmjs.com/package/react-git-info有了它,你可以这样做:
README项目有更多的信息。您还可以看到here软件包的现场演示。
gfttwv5a4#
所以,事实证明没有办法在不弹出的情况下实现这一点,所以我使用的解决方法是:
1)在package.json中,定义脚本
"git-info": "git log -1 --oneline > src/static/gitInfo.txt"
2)为启动和构建添加
npm run git-info
3)在configjs文件中(或者当你需要git信息时),我有
2g32fytz5#
我的方法与@uidevthing的答案略有不同。我不想用环境变量设置污染package.json文件。
您只需运行另一个脚本,将这些环境变量保存到项目根目录下的
.env
文件中。就这样在下面的例子中,我将使用typescript,但无论如何转换为JavaScript应该是微不足道的。
package.json
如果使用JavaScript,则为
node scripts/start.js
scripts/start.ts
创建新脚本文件
scripts/start.ts
上面的代码将设置环境变量并将其保存到根文件夹中的
.env
文件中。必须以REACT_APP_
开头。React脚本会在构建时自动读取.env
,然后在process.env
中定义它们。App.tsx
结果
更多参考:
xriantvc6#
如果你的
package.json
脚本总是在unix环境中执行,你可以实现与@NearHuscarl答案中相同的效果,但是通过从shell脚本初始化你的.env
dotenv文件来减少代码行。生成的.env
然后在后续步骤中由react-scripts拾取。其中,
.env.sh
位于项目根目录中,包含类似于下面的代码,用于在每次构建或启动时覆盖.env
文件内容。由于
.env
在每次构建时都会被覆盖,因此您可以考虑将其放在.gitignore
列表中,以避免在提交差异中产生太多噪音。**再次声明:**此解决方案仅适用于存在bourne shell解释器或类似解释器的环境,即unix。
bfnvny8b7#
你可以使用CRACO和craco-interpolate-html-plugin轻松地将git信息(如commit hash)注入index.html。这样您就不必使用
yarn eject
,它也适用于开发服务器环境沿着生产构建。安装CRACO后,
craco.config.js
中的以下配置对我有效:在
index.html
中:<meta name="build-version" content="%BUILD_VERSION%" />
以下是要添加到
package.json
中以使其全部工作的代码行:7jmck4yq8#
上面提供的答案涵盖了广泛的场景,但我找不到任何提供vanilla JS和跨平台解决方案的。@NearHuscarl的解决方案完全覆盖了
.env
的内容,当它包含其他值时,这并不方便。这里有一个只更新文件的解决方案。我定义了一个新脚本,它在我常用的react-scripts命令之前调用我的JS片段:
package.json
该脚本本身与Node一起运行,不需要外部依赖项(除了具有Node环境)。它将使用添加或更新的
REACT_APP_VERSION=XX
属性更新.env
文件。原始内容保持原样。如果文件不存在,则将创建该文件。scripts/set_env.js