javascript - Puppeteer med TypeScript fungerar inte med esModuleInterop
Om jag försöker använda puppeteer med TypeScript och esModuleInterop=true inställt i tsconfig.json får jag ett fel som säger
puppeteer.launch är inte en funktion
om jag försöker importera puppeteer med
import * as puppeteer from "puppeteer";
Nu till min fråga: Är detta avsedd funktionalitet eller ett fel?
För mig är det ingen stor sak att bara ställa in esModuleInterop på false, men det verkar konstigt
Litet tillägg:
om jag manuellt ändrar puppeteer.launch() till puppeteer.default.launch() i index.js fungerar det
Länkar :
tsconfig.json: https://pastebin.com/6xvkfJg2
package.json: https://pastebin.com/ViwfMwyQ
index.ts: https://pastebin.com/GtHuiHSJ
index.js: https://pastebin.com/TzeCDiGn
Svar #1
Använd import puppeteer from 'puppeteer'-syntax eller ta bort esModuleInterop-flaggan.
För länge sedan, när Typescript-språket utvecklades, var ECMAScript-modulspecifikationen fortfarande på utkaststadiet. Dessutom var riktningen för Typescript som språk något annorlunda: Typescript-teamet tvekade inte att lägga till funktioner som inte var kompatibla med ES. En av dessa funktioner är modulsyntaxen.
import * as smth from 'smth' är en giltig TypeScript-kod, men inte ECMAScript-kod.
import smth from 'smth' är en giltig ECMAScript-kod men är inte en giltig TypeScript-konstruktion.
Flaggan esModuleInterop betyder bokstavligen "vi kommer att använda ECMAScript-importer i vår kod".
Nu, när människor har anammat och älskat ES-modulsyntax, är denna flagga tveklöst standarden.
En mer detaljerad artikel
Svar #2
Prova detta:
import { launch } from 'puppeteer';
Då är allt du behöver göra:
const browser = await launch();
