jtb*_*des 6 flowtype flow-typed puppeteer
考虑操纵木偶的launch()方法。Puppeteer 自述文件中的使用指南推荐使用const puppeteer = require(\'puppeteer\')然后puppeteer.launch():
\n\n\nRun Code Online (Sandbox Code Playgroud)\nconst puppeteer = require(\'puppeteer\');\n\n(async () => {\n const browser = await puppeteer.launch();\n const page = await browser.newPage();\n await page.goto(\'https://example.com\');\n await page.screenshot({path: \'example.png\'});\n\n await browser.close();\n})();\n
并且 Puppeteer 本身导出一个实例,这似乎进一步确认了默认导出的含义:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nmodule.exports = new Puppeteer(__dirname, preferredRevision, isPuppeteerCore);\n
但是,puppeteer \xe2\x89\xa51.12使用的 Flow 类型定义declare export function launch()并不包含默认导出,因此Flow 要求我编写import { launch } from "puppeteer"而不是import puppeteer from "puppeteer".
但使用命名导入会产生TypeError: Cannot read property \'_launcher\' of undefined。同样,我们可以通过简单的测试来确认这不起作用(Node v10.15.0,puppeteer 1.19.0):
const puppeteer = require("puppeteer");\npuppeteer.launch(); // works\nRun Code Online (Sandbox Code Playgroud)\n\nconst { launch } = require("puppeteer");\nlaunch(); // TypeError: Cannot read property \'_launcher\' of undefined\nRun Code Online (Sandbox Code Playgroud)\n\n(大概这是因为在调用时const { launch } =给了我一个未绑定的方法 \xe2\x80\x94 this === undefined。)
尝试 2:在 Flow 中,您还可以使用命名空间 import import * as puppeteer from "puppeteer",但似乎这明确放弃了对默认导出的访问,而是生成了TypeError: puppeteer.launch is not a function。
(我对 TypeScript 不太熟悉,但是Puppeteer 的 DefinelyTyped defs也使用export function launch()而不是默认导出。也就是说,它们似乎打算与 一起使用import * as puppeteer from "puppeteer",尽管我不确定为什么这会在它不起作用时起作用\ Flow 中没有;也许 TypeScript 处理 ES6 模块的方式有所不同?)
那么,我的想法是错误的,还是 Flow 类型定义错误?(既然如此,怎么没有人遇到过这个问题呢?)
\n| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |