Twilio 函数(控制台 UI)中的 ES 代码失败,并出现意外的令牌“导出”错误。 CommonJS 中的代码可以工作。为什么?

问题描述 投票:0回答:1

这是使用 CommonJS 的代码:

    const { createClient } = require('@supabase/supabase-js');
    exports.handler = async (context, event, callback) => {
       const supabaseUrl = 'https://teuytpiznwvvdhrkycqb.supabase.co';
       const supabase = createClient(supabaseUrl, context.SUPABASE_KEY);

这是使用 ESM 抛出错误的代码:


    export const handler = async (context, event, callback) => {
       const { createClient } = await import('@supabase/supabase-js');
       const supabaseUrl = 'https://teuytpiznwvvdhrkycqb.supabase.co';
       const supabase = createClient(supabaseUrl, context.SUPABASE_KEY);

如果我将导入移出我的函数,那么 Twilio 会抛出相同的错误

    const { createClient } = import('@supabase/supabase-js');  
    export const handler = async (context, event, callback) => {
      // const { createClient } = await import('@supabase/supabase-js');
      const supabaseUrl = 'https://teuytpiznwvvdhrkycqb.supabase.co';
      const supabase = createClient(supabaseUrl, context.SUPABASE_KEY);

Twilio UI 使用 Node v18

我也有这个有效的代码,Twilio 文档说支持 ESM

exports.handler = 异步函数(上下文、事件、回调){ const twilioClient = context.getTwilioClient();

twilio supabase-js
1个回答
0
投票

Twilio 函数仅支持 CJS [1]。您可以使用动态导入,如下面的代码片段所示

exports.handler = async (context, event, callback) => {
  const { createClient } = await import('@supabase/supabase-js');
  const supabaseUrl = 'https://abc123.supabase.co';
  const supabase = createClient(supabaseUrl, context.SUPABASE_KEY);  

您仍然可以在本地编写ESM代码;但是,在将其上传到 Twilio Functions 之前,您需要将其转换或捆绑为 CJS。

我怀疑这不是您希望的答案,但我希望它有帮助。

罗布

[1] https://www.twilio.com/docs/serverless/functions-assets/faq#how-can-i-use-an-es-module-in-my-function

© www.soinside.com 2019 - 2024. All rights reserved.