如何解决带有 TypeScript 的 Puppeteer 无法与 esModuleInterop 一起使用
如果我尝试在 tsconfig.json 中使用带有 TypeScript 和 esModuleInterop=true 的 puppeteer,我会收到一条错误消息
puppeteer.launch 不是函数
如果我尝试使用
导入 puppeteerimport * as puppeteer from "puppeteer";
现在我的问题是:这是预期的行为还是错误?
对我来说,将 esModuleInterop 设置为 false 没什么大不了的,但看起来很奇怪
小插件:
如果我在 index.js 中手动将 puppeteer.launch()
更改为 puppeteer.default.launch()
,它会起作用
链接:
tsconfig.json:https://pastebin.com/6xvkfJg2
package.json:https://pastebin.com/ViwfMwyQ
index.ts:https://pastebin.com/GtHuiHSJ
index.js:https://pastebin.com/TzeCDiGn
解决方法
使用 import puppeteer from 'puppeteer'
语法或去掉 esModuleInterop
标志。
很久以前,在开发 typescript 语言时,ECMAScript 模块规范仍在草案中。此外,打字稿作为一种语言的方向略有不同:打字稿团队毫不犹豫地添加了与 ES 不兼容的功能。其中一项功能是模块语法。
import * as smth from 'smth'
是有效的打字稿代码,但不是 ECMAScript 代码。import smth from 'smth'
是有效的 ECMAScript 代码,但不是有效的打字稿构造。
Flag esModuleInterop
字面意思是“我们将在我们的代码中使用 ECMAScript 导入”。
现在,当人们采用并喜爱 ES 模块语法时,这个标志可以说是标准。
试试这个:
import { launch } from 'puppeteer';
那么你所要做的就是:
const browser = await launch();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。