如何在云功能中使用ES6(esm)导入/导出

时间:2020-01-24 22:41:26

标签: 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!");
});

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

SyntaxError:意外的标识符 在Module._compile(internal / modules / cjs / loader.js:721:23)

注意事项

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

  1. 叉库并使用汇总生成cjs文件。
  2. esm就像一个咒语,但会导致不必要的内存消耗

问题:有没有一种方法可以在Google云功能中使用混合导入cjs和esm?(除了我上面描述的选项之外)

很好用在部署功能中,例如--experimental-modules

2 个答案:

答案 0 :(得分:2)

"devDependencies": {
  "@babel/core": "^7.2.0",
  "@babel/preset-env": "^7.2.0",
  "@babel/register": "^7.0.0"
}

.babelrc

{
  "presets": ["@babel/preset-env"]
}

入口点node.js应用

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

// Import the rest of our application.
module.exports = require('./index.js')

答案 1 :(得分:0)

看起来,最新版本的 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

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

和一个示例函数:

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

export const helloWorld = functions.https.onRequest((request, response) => {
  response.send("Hello from Firebase!");
});
相关问题