如何在将云功能部署到Firebase之前复制资产文件

c9x0cxw0  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个firebase项目,在这个项目中我编写了要部署到Google Node Cloud函数中的typescript函数。当我运行firebase deploy --only functions命令时,它将我的代码转换成javascript,并将js输出放到src文件夹旁边的一个名为lib的文件夹中,我的typescript函数存放在这个文件夹中。然而,我的一些函数需要访问本地文件,如.ttf文件或其他文件类型。这些文件没有被复制到lib文件夹,因此,我在运行时Error: ENOENT: no such file or directory, open path/to/file中得到错误
问题一:如何使用deploy命令将资产文件复制到输出文件夹?
问题二:假设我的所有函数都位于单独的文件夹中,我的资产也是如此,我应该如何引用我的资产才能找到它们?我应该给出相对于lib文件夹还是相对于函数所在位置的资产文件路径?
编辑-1
请在此处查看项目结构:需要字体的代码位于some-function.ts文件中。它使用需要字体才能工作的pdfmake库。下面是我在some-function.ts文件中的操作方法:

const fonts: TFontDictionary = {
    Poppins: {
      normal: './fonts/Poppins/Poppins-Regular.ttf',
      bold: './fonts/Poppins/Poppins-Bold.ttf',
      italics: './fonts/Poppins/Poppins-Medium.ttf',
      bolditalics: './fonts/Poppins/Poppins-Thin.ttf',
    }
  };
const pdfmake = require('pdfmake');
const printer = new pdfmake(fonts);

那么,如果我将这些字体放在根目录或src目录下的一个单独文件夹中,我如何引用这些字体呢?

hm2xizp9

hm2xizp91#

经过一番挖掘,我得出了一个解决方案,我想在这里分享。
1-首先,按照@Dharmaraj的建议,我添加了一个脚本,在构建项目之前删除lib文件夹,并在部署之前复制我的资产文件。

"remove-lib":"rm -rf lib",
"copy-assets":"cp -rf src/path/to/your-folder/fonts lib/path/to/your-folder",
"do-build":"tsc",
"build": "npm run remove-lib && npm run do-build && npm run copy-assets",

实际上,添加remove lib命令解决了我在部署函数时遇到的另一个问题。我认为这应该是默认行为,因为当你重命名函数文件时,旧的文件会粘在lib文件夹中,导致各种问题。
无论如何,现在为了正确引用您的资源,只要将路径构造为${__dirname}/fonts/some-font.ttf,前提是字体文件夹与您正在编辑的文件位于同一个文件夹中。

相关问题