【问题标题】:Puppeteer Typescript : Fails with errors when transpillingPuppeteer Typescript:转译时失败并出现错误
【发布时间】:2018-04-04 08:21:40
【问题描述】:

问题的根源:我不能使用 Javascript,因为 Firebase Functions Node.Js 版本还不支持 Async/Await。所以我把它放在 Typescript 中,现在正在尝试转换为 commonJs。

那我做。

tsc -p config.json,然后产生这些错误。

../../../node_modules/firebase-functions/lib/providers/auth.d.ts(5,22): error TS2420: Class 'UserRecordMetadata' incorrectly implements interface 'UserMetadata'.
  Property 'lastSignedInAt' is missing in type 'UserRecordMetadata'.
../../../node_modules/firebase-functions/lib/providers/firestore.d.ts(17,19): error TS2694: Namespace 'admin' has no exported member 'firestore'.

此外,使用 Firebase Serve -only-functions 使用 Vanilla Js 工作正常,只是在 Deploy 上开始失败,另一件事是,当使用 node getTags.js 运行 vanilla 脚本时,运行没有问题。

所以估计这可能是我的 tsconfig?请帮忙。

TSCONFIG.JSON

{
    "compilerOptions": {
        "lib": [
            "es6",
            "dom"
        ],
        "module": "commonjs",
        "noImplicitReturns": true,
        "outDir": "lib",
        "target": "es6"
    },
    "files": [
        "getTags.ts"
    ]
}

打字稿。

import puppeteer from 'puppeteer';
import * as functions from 'firebase-functions'

function getTitle() {
    const ogSelector: any = document.querySelector('meta[property="og:title"]');
    if (ogSelector) {
        return ogSelector.content;
    }

    const imgSelector: any = document.querySelector('[itemprop="name"]');
    if (imgSelector) {
        return imgSelector.text;
    }
    if (document.querySelector('title')) {
        return document.querySelector('title').text;
    }
    return window.location.href; // Print URL as a fallback
}

function getDescription() {
    const ogDesc: any = document.querySelector('meta[property="og:description"]');
    if (ogDesc) {
        return ogDesc.content;
    }

    const descSelector: any = document.querySelector('[itemprop="description"]');
    if (descSelector) {
        return descSelector.text;
    }

    const nameDescSelector: any = document.querySelector('meta[name="description"]');
    if (nameDescSelector) {
        return nameDescSelector.content;
    }

    return document.body.innerText.substring(0, 180) + '...';
}

function getImage() {
    const ogImgSelector: any = document.querySelector('meta[property="og:image"]');
    if (ogImgSelector) {
        return ogImgSelector.content;
    }

    const imgTagSelector: any = document.querySelector('[itemprop="image"]');
    if (imgTagSelector) {
        return imgTagSelector.text;
    }

    return null;
}

exports.getTags = functions.https.onRequest((req, res) => {
    (async () => {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://itunes.apple.com/za/album/my-dear-melancholy/1363309866?app=music&ign-itsct=1363309866-1363309866&ign-itscg=0176&ign-mpt=uo%3D4');

        const title = await page.evaluate(getTitle);
        const description = await page.evaluate(getDescription);
        const image = await page.evaluate(getImage) || await page.screenshot({ path: 'temp.png' });

        browser.close();

        const tags = {
            title,
            description,
            image,
        };
        console.log("Tags " + JSON.stringify(tags));
        res.send("Done Tags :: " + tags);
    })();
});

【问题讨论】:

  • 不是一个解决方案,但为什么: any 有这么多变量?那时你最好不要使用打字稿
  • 众所周知,Puppeteer 不适用于 Cloud Functions。 stackoverflow.com/questions/48667933/…
  • @DougStevenson,好吧,这对 Firebase 来说完全令人失望,无论如何我仍然可以通过另一种方式在云功能上获取元标记?支持的东西?

标签: javascript typescript firebase google-cloud-functions puppeteer


【解决方案1】:

在使用 TS 和 puppeteer 时,我似乎发现在使用 Mocha 时转译到 ES5 似乎对我来说效果更好(好吧,没有部署到 Firebase),但值得一试。

{
    "compilerOptions": {
        //"target": "esnext",
        "target": "es5", //needed for node!
        "declaration": true,
        "lib": [
            "es2015", "dom"
        ]        
    },
    "exclude": [
        "node_modules"
    ]
}

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 2018-05-26
    • 1970-01-01
    • 2022-12-16
    • 2018-02-24
    • 2019-11-09
    • 2012-09-24
    • 2017-06-06
    • 2013-07-18
    相关资源
    最近更新 更多