Enz*_*nzo 5 javascript node.js google-cloud-functions
我正在尝试使用 Node.js 部署一个非常基本的 Google Cloud 无服务器应用程序,但它在 Google Cloud Console 上不断显示以下错误:
\nProvided module can\'t be loaded.\nIs there a syntax error in your code?\nDetailed stack trace: Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /workspace/index.js\nrequire() of ES modules is not supported.\nrequire() of /workspace/index.js from /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/loader.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.\nInstead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /workspace/package.json.\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1080:13)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.getUserFunction (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/loader.js:29:32)\n at Object.<anonymous> (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/index.js:77:32)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\nCould not load the function, shutting down.\nRun Code Online (Sandbox Code Playgroud)\n这是我的index.js文件:
\nexport function foobar(req, res) {\n res.status(200).send("Hello World!");\n}\nRun Code Online (Sandbox Code Playgroud)\n这是我的package.json文件:
\n{\n ...\n "main": "index.js",\n "type": "module",\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n我正在使用它运行
\ngcloud functions deploy foobar --region europe-west1 --runtime nodejs14 --trigger-http --allow-unauthenticated\nRun Code Online (Sandbox Code Playgroud)\n我已经尝试过以下操作:
\n将index.js重命名为index.mjs并在package.json"main": "index.js"中更改为(错误仍然存在)"main": "index.mjs"
解决方案 1 加上"type": "module"从package.json中删除(错误仍然存在)
"type": "module"从package.json中删除(引发 SyntaxError: Unexpected token \'export\')
将index.js重命名为index.cjs并更改"main": "index.js"为"main": "index.cjs"在package.json(引发语法错误:意外的标记\'export\')
解决方案 4 加上"type": "module"从package.json中删除(引发 SyntaxError: Unexpected token \'export\')
添加--experimental-modules标志gcloud functions deploy(显示无法识别的参数:--experimental-modules)
解决方案 6 但替换gcloud functions deploy为gcloud beta functions deploy(显示无法识别的参数:--experimental-modules)
完全卸载 Google Cloud SDK 并再次尝试上述所有解决方案
\n唯一有效的解决方案是解决方案 3 加上使用
\nexports.foobar = (req, res) => {\n res.status(200).send("Hello World!");\n}\nRun Code Online (Sandbox Code Playgroud)\n但是,我想将它用于具有 module 的 Telegram 机器人node-telegram-bot-api,但因为我"type": "module"从package.json中删除,所以当我导入 Telegram API 时,它会引发“SyntaxError:无法在模块外使用 import 语句”。
项目结构是使用创建的npm init,如下所示。
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json\nRun Code Online (Sandbox Code Playgroud)\n有什么想法吗?我的 Node.js 版本是 v14.17.0,我的 Google Cloud SDK 版本是 v342.0.0。
\n小智 2
Google Cloud Functions(以及 Firebase Functions)尚不支持 ESM 模块:
https://github.com/GoogleCloudPlatform/functions-framework-nodejs/issues/233 https://github.com/firebase/firebase-tools/issues/2994
现在我认为你正在混淆使用和打包 ES 模块。您不必将函数代码打包为 ES 模块即可使用node-telegram-bot-apimodule. 只需使用语法导入即可require,而不是使用import语法。
| 归档时间: |
|
| 查看次数: |
5734 次 |
| 最近记录: |