javascript - Puppeteer cu TypeScript nu funcționează cu esModuleInterop
Dacă încerc să folosesc puppeteer cu TypeScript și esModuleInterop=true setat în tsconfig.json, primesc o eroare care spune
puppeteer.launch nu este o funcție
dacă încerc să import puppeteer cu
import * as puppeteer from "puppeteer";
Acum la întrebarea mea: Este acesta un comportament intenționat sau un bug?
Pentru mine, nu e mare lucru să setezi esModuleInterop pe false, dar pare ciudat
Mic adaos:
dacă schimb manual puppeteer.launch() în puppeteer.default.launch() în index.js funcționează
Legături :
tsconfig.json: https://pastebin.com/6xvkfJg2
package.json: https://pastebin.com/ViwfMwyQ
index.ts: https://pastebin.com/GtHuiHSJ
index.js: https://pastebin.com/TzeCDiGn
Răspuns #1
Folosește sintaxa import puppeteer from 'puppeteer' sau scapă de flagul esModuleInterop.
Cu mult timp în urmă, când limbajul TypeScript a fost dezvoltat, specificația modulelor ECMAScript era încă în stadiu de proiect. Mai mult, direcția TypeScript ca limbaj era ușor diferită: echipa TypeScript nu ezita să adauge funcționalități incompatibile cu ES. Una dintre aceste funcționalități este sintaxa modulelor.
import * as smth from 'smth' este un cod TypeScript valid, dar nu este cod ECMAScript.
import smth from 'smth' este un cod ECMAScript valid, dar nu este o construcție TypeScript validă.
Flagul esModuleInterop înseamnă literal „vom folosi importuri ECMAScript în codul nostru”.
Acum, când oamenii au adoptat și au iubit sintaxa modulelor ES, acest flag este, probabil, standardul.
Un articol mai detaliat
Răspunsul #2
Încearcă asta:
import { launch } from 'puppeteer';
Atunci tot ce trebuie să faci este:
const browser = await launch();
