如何在 ESM 中导出以连字符命名的变量

min*_*isk 7 javascript node.js firebase typescript google-cloud-functions

中山大学

exports['foo-bar'] = {}  // -> OK
Run Code Online (Sandbox Code Playgroud)

环境管理署

exports['foo-bar'] = {};        // -> NG
export['foo-bar'] = {};         // -> NG
export { 'foo-bar': {} };       // -> NG
export { fooBar as foo-bar };   // -> NG
export { fooBar as 'foo-bar' }; // -> NG
Run Code Online (Sandbox Code Playgroud)

通常我不会这样做,所以这不是问题,但我遇到了麻烦,因为Firebase Functions v2 只允许名称中包含小写字母、数字和连字符,并要求我将其导出。

Mic*_*ral 5

放弃打字稿后我发现了什么

export { endpoint as "my-dashed-endpoint-name" }
Run Code Online (Sandbox Code Playgroud)

我发现 firebase 仍然不让我打电话my-dashed-endpoint-name,给我错误Failed to find function my.dashed.endpoint.name in the loaded module.. 嗯。

因此,firebase实际上希望您做的是导出一个对象,它会将名称转换为对象路径的虚线版本!

因此,要获得一个名为 的函数my-dashed-endpoint-name,您必须这样做。

export let my = {
  dashed: {
    endpoint: {
      name: onCall(...),
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

不是最符合人体工程学的...但使用时确实更有意义

export * as post from "./post-endpoints.js"
Run Code Online (Sandbox Code Playgroud)

这将为所有导出添加前缀post-endpoints.jspost-例如post-delete, post-add