جافاسكريبت - Puppeteer مع TypeScript لا يعمل مع esModuleInterop
إذا كنت أحاول استخدام Puppeteer مع TypeScript و esModuleInterop=true مضبوطة في tsconfig.json أحصل على خطأ يقول
puppeteer.launch ليست دالة
إذا حاولت استيراد puppeteer باستخدام
import * as puppeteer from "puppeteer";
والآن إلى سؤالي: هل هذا سلوك مقصود أم خطأ؟
بالنسبة لي، ليس بالأمر الكبير مجرد تعيين esModuleInterop إلى false، لكنه يبدو غريبًا
إضافة صغيرة:
إذا قمت بتغيير puppeteer.launch() يدوياً إلى puppeteer.default.launch() في index.js فإنه يعمل
روابط :
tsconfig.json: https://pastebin.com/6xvkfJg2
package.json: https://pastebin.com/ViwfMwyQ
index.ts: https://pastebin.com/GtHuiHSJ
index.js: https://pastebin.com/TzeCDiGn
الإجابة رقم 1
استخدم بناء الجملة import puppeteer from 'puppeteer' أو تخلص من علامة esModuleInterop.
منذ وقت طويل، عندما تم تطوير لغة تايب سكربت، كانت مواصفة وحدات ECMAScript لا تزال قيد المسودة. علاوة على ذلك، كان اتجاه تايب سكربت كلغة مختلفًا قليلًا: لم يتردد فريق تايب سكربت في إضافة ميزات غير متوافقة مع ES. واحدة من هذه الميزات هي صياغة الوحدات.
import * as smth from 'smth' هو كود تايب سكريبت صالح، لكنه ليس كود ECMAScript.
import smth from 'smth' هو كود ECMAScript صالح لكنه ليس بناءً صالحًا في تايب سكريبت.
العلم esModuleInterop يعني حرفيًا "سنستخدم استيرادات ECMAScript في كودنا".
الآن، عندما تبنى الناس وأحبوا صياغة وحدات ES، يمكن القول إن هذا العلم أصبح المعيار.
مقالة أكثر تفصيلاً
الإجابة رقم 2
جرب هذا:
import { launch } from 'puppeteer';
ثم كل ما عليك فعله هو:
const browser = await launch();
