我遇到了同样的问题,并通过编写自定义插件来使用serverless.yml
环境变量构建前端来解决它。serverless-build-client
如果您想使用该插件,则会调用它。然后我用来serverless-finch
将构建上传到 S3。
serverless-build-client
很简单;它只是遍历环境变量,并将它们添加到process.env
. 这是重要的位
const environment = this.serverless.service.provider.environment;
if (!environment) {
return;
}
Object.keys(environment).forEach(variable => {
process.env[variable] = environment[variable];
});
// Later
spawnSync("yarn", ["build"]);
例子
我有 2 个独立的无服务器项目:一个用于前端,一个用于后端。部署后端时,堆栈会输出ServiceEndpoint
,这是您要引用的基本端点。
在serverless.yml
文件中,我有类似的东西:
plugins:
- serverless-build-client
- serverless-finch
provider:
...
environment:
REACT_APP_ENDPOINT: ${cf:<backend service name>.ServiceEndpoint}
然后在前端,我引用环境变量来发出请求
const response = await fetch(`${process.env.REACT_APP_ENDPOINT}/some/api`);
我的部署脚本按此顺序执行命令
// Backend
npx serverless deploy
// Frontend
npx serverless deploy
npx serverless build
npx serverless client deploy