如何在云函数中使用 ES6(esm) 导入/导出

Igo*_*tko 7 javascript node.js google-cloud-functions es6-modules

import functions from 'firebase-functions';
import UtilModuler from '@utilModuler'

exports.helloWorld = functions.https.onRequest((request, response) => {
 response.send("Hello from Firebase!");
});
Run Code Online (Sandbox Code Playgroud)

从 '@utilModuler' 导入 UtilModuler;^^^^^^^^^^

语法错误:Module._compile 处的意外标识符 (internal/modules/cjs/loader.js:721:23)

注意事项

我正在使用通过导入/导出编写的第三方库(@utilModuler)。可能的解决方法:

  1. Fork 库并生成带有汇总的 cjs 文件。
  2. esm就像一个魅力,但它会导致不必要的内存消耗

问题:有没有办法在谷歌云功能中使用混合导入 cjs 和 esm?(除了我上面描述的选项)

在部署功能中使用类似--experimental-modules会很好

wie*_*son 6

看起来,最新版本的 firebase CLI ( https://github.com/firebase/firebase-tools/releases/tag/v9.15.0 ) 添加了 ESM 支持:

$ npm install -g firebase-tools # Get the latest firebase-cli
$ firebase deploy --only functions # Deploy as usual
Run Code Online (Sandbox Code Playgroud)

  1. 您必须选择nodejs14运行时。
  2. 您必须手动包含最新版本的 @google-cloud/functions-framework 依赖项。例如
// package.json
...
  "engines": {
    "node": "14"
  },
  "type": "module",
  "dependencies": {
    "@google-cloud/functions-framework": "^1.9.0",
    ...
  },
Run Code Online (Sandbox Code Playgroud)

和一个示例函数:

// index.js
import functions from "firebase-functions";

export const helloWorld = functions.https.onRequest((request, response) => {
  response.send("Hello from Firebase!");
});
Run Code Online (Sandbox Code Playgroud)


Muh*_*man 1

"devDependencies": {
  "@babel/core": "^7.2.0",
  "@babel/preset-env": "^7.2.0",
  "@babel/register": "^7.0.0"
}
Run Code Online (Sandbox Code Playgroud)

.babelrc

{
  "presets": ["@babel/preset-env"]
}
Run Code Online (Sandbox Code Playgroud)

入口点 Node.js 应用程序

require("@babel/register")({})

// Import the rest of our application.
module.exports = require('./index.js')
Run Code Online (Sandbox Code Playgroud)