为啥 export const helloWorld 在 firebase deploy 中出现错误而 export.helloWorld 没有?

Posted

技术标签:

【中文标题】为啥 export const helloWorld 在 firebase deploy 中出现错误而 export.helloWorld 没有?【英文标题】:Why export const helloWorld gives an error in firebase deploy and exports.helloWorld does not?为什么 export const helloWorld 在 firebase deploy 中出现错误而 export.helloWorld 没有? 【发布时间】:2020-07-12 21:06:59 【问题描述】:

在一个使用 Expo 的 React Native 项目中,我尝试使用 export 部署以下云功能:

注意:我在 index.js 中使用 javascript

export const helloWorld = functions.https.onRequest((request, response) => 
 response.send("Hello from Firebase!");
);

但是我收到了这个错误:

Error: Error occurred while parsing your function triggers.

/Users.../functions/index.js:5
export const helloWorld = functions.https.onRequest((request, response) => 
^^^^^^

SyntaxError: Unexpected token export
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)

然后我使用了exports.helloWorld...,效果很好!

exports.helloWorld = functions.https.onRequest((request, response) => 
 response.send("Hello from Firebase!");
);

谁能解释为什么会这样?

谢谢

【问题讨论】:

***.com/questions/38296667/… 嘿@DougStevenson 感谢您的回复。如我所见:“NodeJS 使用 CommonJS 模块语法(module.exports)而不是 ES6 模块语法(export 关键字)”。 但是为什么它在您的教程中与 TypeScript 一起使用?将代码编译成 lib 文件夹中的 Javascript 时,代码是否会在 commonjs 中与 babel 一起转译? TypeScript 总是被转译的,你必须选择它使用的模块系统。 Firebase 在创建项目时会在 tsconfig.json 中为您选择正确的一个。您可以通过查看 lib 下的 javascript 代码来查看它生成的内容。 【参考方案1】:

改成:

const helloWorld = functions.https.onRequest((request, response) => 
 response.send("Hello from Firebase!");
);

module.exports = helloWorld

直接出口使出口成为出口之一。即:通过exports.something引用

Module.exports 在引用的地方直接指定导出。

【讨论】:

嘿@Nilanka 感谢您的回答。我会听从你的建议! 其实我在使用module.exports = ...的时候在部署函数时遇到了问题。请检查我的评论here

以上是关于为啥 export const helloWorld 在 firebase deploy 中出现错误而 export.helloWorld 没有?的主要内容,如果未能解决你的问题,请参考以下文章

export default与export const的区别

export default与export const的区别

ES6中表达export default const是无效的

现代JavaScript:ES6+ 中的 Imports,Exports,Let,Const 和 Promise

FOUNDATION_EXPORT 延伸

为啥 const/non-const 函数重载的继承不明确?