Stripe error: EventEmitter is not a constructor

Stripe error: EventEmitter is not a constructor

你好,

我正在开发使用 Stripe 进行支付的项目,该项目使用的框架是 SvelteKit,为了方便起见,我也使用 TS。

我实施了 Stripe 支付,在本地测试,一切正常,然后我将项目部署到 Firebase 云功能,然后出现第一个错误。每次我调用创建支付意图的端点都失败(但仅在 FB 云功能中,它从未在本地失败)。

所以我决定(不仅仅是因为这个错误)将用于生成支付意图的功能移动到我的 __layout.svelte 之一,它可以从前端调用并在后端执行而不需要向暴露于整个互联网的端点发出 HTTP 请求。

条纹配置:

import Stripe from "stripe";

console.log('secret defined:', import.meta.env.VITE_STRIPE_SECRET_KEY);
const stripe = new Stripe(import.meta.env.VITE_STRIPE_SECRET_KEY, {
    apiVersion: '2020-08-27',
});
console.log('after stripe conf');

export default stripe;

我将该函数移动到所需的 __layout.svelte 并得到错误 EventEmitter is not a constructor

然后我找到了 this 问题,并按照建议的答案做了。然后我得到了不同的错误: http.Agent is not a constructor.

嗯,这是一道比较难的题,跟Vite有关。后端的 Stripe API 是用 CJS 编写的,Vite 在使用 SSR 时处理 CJS 代码有问题。根据文档,我应该包括条带以进行优化,但这没有用。这些 Github 问题更好地描述了这个问题:Svelte issue Vite issue.

我很幸运我使用了 Firebase,所以我通过将生成支付意图的函数移动到 Cloud Functions 来解决这个问题。所以这是适合我的解决方案,而不是适合所有人,但我希望这对某人有所帮助。