Package.json 复杂的启动脚本,带有“sh -ac”和 Firebase 的 .env 文件

kon*_*orf 5 javascript firebase reactjs

萤火虫示例项目package.json

"start": "sh -ac '. ./.env.dev; firebase use dev &&  react-scripts start'",
Run Code Online (Sandbox Code Playgroud)

在我的 Windows 10 上,它不适用于&&

现在使用别名 dev (firefly-boilerplate) 未知脚本“start”。反应脚本开始'

此脚本使用;而不是&&,应用程序启动,但它不连接数据库:

@firebase/firestore: Firestore (5.0.4): Could not reach Cloud Firestore backend. Connection failed 2 times. Most recent error: FirebaseError: [code=not-found]: The project firefly-boilerplate
 does not exist or it does not contain an active Cloud Datastore database.
Run Code Online (Sandbox Code Playgroud)

所以我必须把 Api 密钥、域和项目名称.env.dev放进index.js去才能工作。为什么此脚本不适用于&&

什么sh -ac命令呢?

Mic*_*igh 6

sh是用于运行 shell 的 POSIX 命令(shell 是为命令行终端提供动力的程序)。运行sh -ac是说有效地“运行 shell 命令并自动导出在其运行期间分配的所有变量”。

一个.env文件通常用来描述需要的脚本来运行本地的环境变量,所以sh -ac ./.env.dev基本上是说负荷全部由环境变量.env.dev

然后,这些环境变量在后续命令中可用,通过&&这些命令在单个上下文中执行多个命令。

简单地说,这个脚本对 Windows 不太友好。您想要做的是查看.env.dev它正在设置的环境变量,然后在运行firebasereact-scripts命令之前在本地终端中设置这些变量。

  • 奇怪的是,如果没有“./”,它就无法工作(我正在使用 WSL),例如它必须是“start”:“sh -ac '. ./.env.dev; ...而不是“start”: “sh-ac”。.env.dev;...否则它会抱怨找不到文件 (3认同)