NestJS导入TTF字体报错:SyntaxError: Invalid or unexpected token
解决NestJS中导入PDF字体的问题
你遇到的错误是因为Node.js尝试将TTF字体文件当作JavaScript模块解析,而TTF是二进制文件,自然会报语法错误。直接用import导入字体文件是错误的做法,正确的处理方式如下:
1. 使用文件路径而非import导入字体
放弃import语句,直接通过文件路径访问字体文件。Node.js的模块系统仅支持解析JS/TS等文本类模块,二进制资源需要用路径引用。
2. 用path模块生成可靠的文件路径
使用Node.js内置的path模块拼接绝对路径,避免相对路径在不同运行环境下出错:
import * as path from 'path'; // 生成dist目录下字体文件的绝对路径 const mulishItalicFontPath = path.join(process.cwd(), 'dist/assets/Mulish-Italic.ttf');
3. 在PDF库中使用字体路径
以常用的PDF生成库pdfkit为例,直接将路径传入字体注册方法:
import PDFDocument from 'pdfkit'; import * as fs from 'fs'; import * as path from 'path'; export async function generatePdf() { const doc = new PDFDocument(); const fontPath = path.join(process.cwd(), 'dist/assets/Mulish-Italic.ttf'); // 注册字体 doc.registerFont('Mulish Italic', fontPath); // 使用字体 doc.font('Mulish Italic').fontSize(16).text('这是使用自定义斜体字体的文本'); // 输出PDF文件 doc.pipe(fs.createWriteStream('output.pdf')); doc.end(); }
4. 确保NestJS正确复制静态资源到dist
检查nest-cli.json中的配置,确保构建时assets目录会被复制到dist:
{ "$schema": "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { "deleteOutDir": true, "assets": ["assets/**/*"], // 配置复制assets下所有文件 "watchAssets": true // 开发模式下自动同步assets修改 } }
内容的提问来源于stack exchange,提问作者hellogoodnight
相关产品推荐
相关产品推荐

