javascript - Puppeteer dengan TypeScript tidak berfungsi dengan esModuleInterop


Jika saya cuba menggunakan puppeteer dengan TypeScript dan esModuleInterop=true ditetapkan dalam tsconfig.json, saya mendapat ralat yang mengatakan

puppeteer.launch bukanlah fungsi

jika saya cuba mengimport puppeteer dengan

import * as puppeteer from "puppeteer";

Sekarang kepada soalan saya: Adakah ini kelakuan yang dimaksudkan atau satu pepijat?

Bagi saya, ia bukan perkara besar untuk hanya menetapkan esModuleInterop kepada false, tetapi ia nampak aneh


Tambahan kecil:

jika saya menukar secara manual puppeteer.launch() kepada puppeteer.default.launch() dalam index.js ia berfungsi


Pautan :

tsconfig.json: https://pastebin.com/6xvkfJg2

package.json: https://pastebin.com/ViwfMwyQ

index.ts: https://pastebin.com/GtHuiHSJ

index.js: https://pastebin.com/TzeCDiGn

Jawapan #1

Gunakan sintaks import puppeteer from 'puppeteer' atau singkirkan bendera esModuleInterop.

Dahulu kala, apabila bahasa TypeScript dibangunkan, spesifikasi modul ECMAScript masih dalam draf. Selain itu, arah TypeScript sebagai bahasa adalah sedikit berbeza: pasukan TypeScript tidak teragak-agak untuk menambah ciri yang tidak serasi dengan ES. Salah satu ciri ini ialah sintaks modul.

import * as smth dari 'smth' adalah kod typescript yang sah, tetapi bukan kod ECMAScript.
import smth dari 'smth' adalah kod ECMAScript yang sah tetapi bukan pembinaan typescript yang sah.

Flag esModuleInterop secara harfiah bermaksud "kita akan menggunakan import ECMAScript dalam kod kita".
Sekarang, apabila orang telah menerima dan menyukai sintaks modul ES, flag ini boleh dikatakan standard.

Artikel yang lebih terperinci

Jawapan #2

Cuba ini:

import { launch } from 'puppeteer';

Kemudian semua yang perlu anda lakukan ialah:

const browser = await launch();