Недавно у меня была такая же проблема, и я наконец нашел решение. Я не гуру, поэтому кто-то, вероятно, сможет предложить лучший способ, но вот что сработало для меня.
Из-за того, как Vercel выполняет свои функции без сервера, функция на самом деле ничего не знает о остальная часть проекта или папка publi c. Это имеет смысл (потому что безопасность), но это усложняет, когда вам нужен фактический путь к файлу. Вы можете импортировать файл шрифта без проблем, процесс сборки даст ему новое имя и поместит его на диск (в /var/task
), но вы не сможете получить к нему доступ. path.resolve(_font_name_)
может видеть его, но вы не можете получить к нему доступ.
Я закончил тем, что написал очень плохую отдельную страницу API, которая использовала path.join
и fs.readdirSync
, чтобы увидеть, какие файлы действительно видны из страница API. Одна вещь, которая видна, это папка node_modules, которая содержит файлы для модулей, используемых на этой странице API.
fs.readdirSync(path.join(process.cwd(), 'node_modules/')
Итак, я написал локальный модуль, установил его в свой проект и импортировал в моя страница API. В локальном модуле package.json
у меня есть строка "files": ["*"]
, поэтому он объединит все файлы модуля в свою папку node_modules (вместо просто файлов. js). В моем модуле у меня есть файл шрифта и функция, которая копирует его в /tmp
(/tmp
доступен для чтения и записи), а затем возвращает путь к файлу /tmp/Roboto-Regular.ttf
.
На своей странице API я включаю этот модуль, затем запускаю его и передаю результирующий путь в registerfont
.
Он работает. Я бы поделился своим кодом, но сейчас он довольно небрежный, и я хотел бы сначала очистить его и попробовать пару вещей (например, я не уверен, нужно ли мне копировать его в / tmp, но у меня нет Я проверил это без этого шага). Когда я это улажу, я отредактирую этот ответ.