import tocbot from tocbot 提示no export?
- 作者
 
- Name
 - 青玉白露
 - Github
 - @white0dew
 
- Modified on
 
- Reading time
 - 2 分钟
阅读:.. 评论:..  
背景
最近项目更新了tocbot,结果发现报错了··
一脸懵逼,于是问了一下 AI,AI 给出了三种解释以及解决方法。
解决
你遇到的错误可能是因为 TypeScript 无法正确解析 tocbot 模块的导出方式。tocbot 模块使用了 CommonJS 的导出方式,而 TypeScript 默认使用 ES 模块的导入方式。
为了解决这个问题,你可以使用以下几种方法之一:
方法 1: 使用 require 导入
你可以使用 require 语法来导入 tocbot,这在 CommonJS 模块中是常见的做法。
const tocbot = require('tocbot');
方法 2: 使用 esModuleInterop(测试无效!)
你可以在 tsconfig.json 中启用 esModuleInterop 选项,这样 TypeScript 会自动处理 CommonJS 模块的导入。
{ "compilerOptions": { "esModuleInterop": true } }
然后你可以像这样导入 tocbot:
import tocbot from 'tocbot';
方法 3: 使用 import * as(测试有效)
你也可以使用 import * as 语法来导入 tocbot,这在处理 CommonJS 模块时是常见的做法。
import * as tocbot from 'tocbot';
示例代码
以下是一个完整的示例,展示了如何使用 tocbot 并配置其选项:
// 方法 1: 使用 require 导入 const tocbot = require('tocbot'); // 方法 2: 使用 import 导入(需要启用 esModuleInterop) // import tocbot from 'tocbot'; // 方法 3: 使用 import * as 导入 // import * as tocbot from 'tocbot'; // 初始化 tocbot tocbot.init({ tocSelector: '.js-toc', contentSelector: '.js-toc-content', headingSelector: 'h1, h2, h3', ignoreSelector: '.toc-ignore', hasInnerContainers: true, linkClass: 'toc-link', extraLinkClasses: 'extra-link-class', activeLinkClass: 'is-active-link', listClass: 'toc-list', extraListClasses: 'extra-list-class', isCollapsedClass: 'is-collapsed', collapsibleClass: 'is-collapsible', listItemClass: 'toc-list-item', activeListItemClass: 'is-active-li', collapseDepth: 6, scrollSmooth: true, scrollSmoothDuration: 420, scrollSmoothOffset: -100, headingsOffset: 100, throttleTimeout: 50, positionFixedSelector: '.js-toc', positionFixedClass: 'is-position-fixed', fixedSidebarOffset: 'auto', includeHtml: true, includeTitleTags: true, onClick: (e: MouseEvent) => { e.preventDefault(); console.log('Link clicked'); }, orderedList: false, scrollContainer: null, skipRendering: false, headingLabelCallback: (headingLabel: string) => { return headingLabel.length > 20 ? headingLabel.substring(0, 17) + '...' : headingLabel; }, ignoreHiddenElements: true, headingObjectCallback: (obj: object, node: HTMLElement) => { if (node.classList.contains('exclude-from-toc')) { return; } return obj; }, basePath: '', disableTocScrollSync: false, tocScrollOffset: 20 }); // 销毁 tocbot // tocbot.destroy(); // 刷新 tocbot // tocbot.refresh();
通过这些方法,你应该能够成功导入并使用 tocbot 模块。

