使用npm docx包导出文档时遇HeadingLevel未定义错误求助
问题:docx包中HeadingLevel未定义的TypeError
我正在使用npm的docx包开发导出docx的模块,但每次运行都会报错:
TypeError: docx_1.HeadingLevel is undefined
已排查循环导入问题,未发现异常。我的代码如下:
import { HeadingLevel, Document, Packer, Paragraph, TextRun, ImageRun } from 'docx'; const downloadObjectAsDocx = (exportObj: any, exportName: string) => { // Function to generate the document console.log(exportObj); // Create document const doc = new Document({ sections: [ { properties: {}, children: [ // Title new Paragraph({ text: exportObj.applicationInfo ? exportObj.applicationInfo.name : '', heading: HeadingLevel.TITLE, }), // Description Header new Paragraph({ text: 'Description', heading: HeadingLevel.HEADING_1, }), // Description Content new Paragraph({ children: [ new TextRun({ text: exportObj?.applicationInfo?.description || '', break: 1, }), ], }), // Architecture Header new Paragraph({ text: 'Architecture', heading: HeadingLevel.HEADING_1, }), // Architecture Image new Paragraph({ children: [ new ImageRun({ data: exportObj?.architecture?.image || '', // base64 string from JSON transformation: { width: 500, height: 300, }, }), ], }), // Assumptions Header new Paragraph({ text: 'Assumptions', heading: HeadingLevel.HEADING_1, }), // Dynamically added Assumptions ...(exportObj.assumptions || []).map((assumption: any) => new Paragraph({ text: assumption.content, bullet: { level: 0, }, }), ), ], }, ], }); // Use Packer to generate a blob and simulate a download void Packer.toBlob(doc).then(blob => { const url = URL.createObjectURL(blob); var downloadAnchorNode = document.createElement('a'); downloadAnchorNode.setAttribute('href', url); downloadAnchorNode.setAttribute('download', exportName + '.docx'); document.body.appendChild(downloadAnchorNode); downloadAnchorNode.click(); downloadAnchorNode.remove(); }); }; export default downloadObjectAsDocx;
堆栈信息截图:
解决方案
1. 适配新版本的导入路径
docx v8+版本重构了枚举的导出路径,HeadingLevel不再从根路径导出,需改为:
import { Document, Packer, Paragraph, TextRun, ImageRun } from 'docx'; import { HeadingLevel } from 'docx/build/enums';
2. 使用字符串替代枚举值(无需修改导入)
直接用对应的字符串常量替代HeadingLevel枚举,兼容性更好:
// 原代码 heading: HeadingLevel.TITLE // 替换为 heading: "Title" // 原代码 heading: HeadingLevel.HEADING_1 // 替换为 heading: "Heading1"
3. 回退到兼容版本
如果不想修改代码,可回退到docx v7.x版本:
npm install docx@7.7.0
4. 修复损坏的依赖
若依赖包存在损坏,执行以下命令重新安装:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Lucas Kauffman
相关产品推荐
相关产品推荐

