You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:16:11