NestJS - 将静态文件(非导入的文件)复制到dist文件夹的正确方法

5

我正在开发一个应用程序,使用谷歌云API(例如Google Cloud Storage)。为了使应用程序能够通过API进行身份验证,我需要将包含认证凭据的keyfile.json文件的路径传递给GCloud API初始化脚本。

const storage = new Storage({
      keyFilename: path.join(__dirname, '../../keyfile.json'),
});

我把 keyfile.json 放到 NestJS 的 src 文件夹中,但当我构建应用程序时,该文件没有复制到 dist 目录。在 NestJS 中处理静态文件复制的推荐方法是什么?

3
有没有不把文件放在 root/static 或类似位置的原因?这样对于 srcdist 来说,路径就是相同的了。 - Jay McDoniel
哦...对了,完全忘记了静态文件夹。谢谢。我想现在这样就可以了。 - Daniil Andreyevich Baunov
或者,您是否排除了使用应用程序(运行时)的服务帐户和应用程序默认凭据?这样可以避免在源代码旁边分发密钥。 - DazWilkin
@DazWilkin,不太确定我理解了你的想法。你能再详细解释一下吗?我认为我现在的做法并不是正确的方法。 - Daniil Andreyevich Baunov
2
在GCP上,每个计算运行时都会将代码作为服务帐户运行。您的代码可以(非常容易地)使用应用程序默认凭据进行身份验证。然后,只要该帐户具有适当的IAM权限,您的代码就将被授权进行方法调用。请参见此链接:https://cloud.google.com/docs/authentication/production 在所有这些情况下,如果您的代码正在(App|Compute|Kubernetes|Functions)下运行,则它将自动由服务帐户进行身份验证。 - DazWilkin
2个回答

15

只需在 nest-cli.json 的 assets 数组中声明您的目录:

{
    "collection": "@nestjs/schematics",
    "sourceRoot": "src",
    "compilerOptions": {
        "assets": [
            "resources/*"
        ]
    }
}

来源: https://docs.nestjs.com/cli/monorepo#assets


我不确定这仅适用于单体库项目,没有在文档中找到任何暗示这种情况的内容。 - nomadoda
@nomadoda 它位于/cli/monorepo#assets下,当时有一条注释指定了这一点。如果您成功使其工作,我可以更新以删除monorepo的提及? - Yohan Dahmani
1
是的,在标准设置下,它对我来说运行良好。 - nomadoda
@nomadoda 更新了我的答案!谢谢,如果它有帮助,请考虑给问题和答案点赞。 - Yohan Dahmani

0

为了澄清事情并添加一个重要的点:

  • 当您创建和部署您的应用引擎时,应用引擎默认服务帐户将被创建并用作App Engine服务的标识。
  • App Engine默认服务帐户与您的Google Cloud项目相关联,并代表在App Engine中运行的应用程序执行任务。
  • 默认情况下,App Engine默认服务帐户在项目中具有编辑者角色。
  • 此外,默认情况下,您的App Engine应用程序使用App Engine服务帐户的凭据。
  • 这就是神奇地让您的应用程序调用Google Cloud API而无需进行身份验证设置的方式。

您可以在此处找到此信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接