gpt4 book ai didi

typescript - 使用 firebase 功能读取文件

转载 作者:行者123 更新时间:2023-12-05 00:44:49 24 4
gpt4 key购买 nike

我有一个 Firebase 函数,想读取一个 html 文件,存储在子文件夹中。

── functions
├── src
| ├── index.ts // Here is the function
| ├── html
| | ├── template.html // the file I want to read

我尝试通过 const html = fs.readFileSync('./html/template.html'); 读取文件,但它总是告诉我

Error: ENOENT: no such file or directory, open './html/template.html'at Object.openSync

我几乎解决了有关此主题的 stackoverflow 上的所有问题,但对我没有任何帮助。我也尝试将文件放在与函数相同的文件夹中,但它总是给我错误。

我是否需要安装一些包或以某种方式导入文件才能访问它?

最佳答案

对于任何从搜索结果进入此帖子的人...

解决方案不是使用 path.resolve

这里的问题是,fs.readFileSync 解析了相对于 process.cwd() 的路径(目录节点是从中执行的)。对于 firebase 函数,这将始终是为 firebase.json 中的 source 定义的目录(默认情况下,functions 目录)。
此处记录了此功能:
https://nodejs.org/api/path.html#path_path_resolve_paths

If, after processing all given path segments, an absolute path has not yet been generated, the current working directory is used.

path.resolve 具有相同的行为。它总是解析为绝对路径。如果你传入的路径不是绝对的,它会在它前面加上 process.cwd()
Node 文档中似乎没有记录,但您可以在此处亲自查看:https://github.com/nodejs/node/blob/029d1fd797975ef89b867f9d606257f0f070a462/lib/path.js#L1017

您可以通过两种方式解决此问题:

  • 使用相对于函数根目录的路径(在本例中为 src/html/template.html)
  • 使用 __dirname (path.resolve(__dirname, './html/template.html')

__dirname 是一个变量,它总是返回当前正在执行的文件所在目录的绝对路径。

关于typescript - 使用 firebase 功能读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65647010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com