当前位置: 首页 > 知识库问答 >
问题:

火力基地部署;导致“无法在模块外使用导入”[不重复]

时衡虑
2023-03-14

注意:这个问题可能看起来像一个重复的问题,但它不是/尝试了所有的修复,但仍然不起作用!(如果你读了这个问题,你会知道为什么)

我有一个Firebase函数项目,我的文件夹结构是这样的,

- functions
  - index.js
  - firebase-dubug.log
  - config.json
  - ... bunch of other files and folder which aren't necessary. 
- .firebaserc
- firebase.json

所以,当我运行这个命令时,

firebase deploy

它试图部署,但在控制台中显示了这一点,

=== Deploying to 'project-id [hidden]'...

i  deploying functions, hosting
i  functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i  functions: ensuring required API cloudbuild.googleapis.com is enabled...
i  functions: ensuring required API artifactregistry.googleapis.com is enabled...
+  functions: required API cloudfunctions.googleapis.com is enabled
+  functions: required API cloudbuild.googleapis.com is enabled
+  functions: required API artifactregistry.googleapis.com is enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (2.4 MB) for uploading
+  functions: functions folder uploaded successfully
i  hosting[pq-store-dc918]: beginning deploy...
i  hosting[pq-store-dc918]: found 29 files in functions/build
+  hosting[pq-store-dc918]: file upload complete
i  functions: updating Node.js 16 function firebaseApp(us-central1)...

Functions deploy had errors with the following functions:
        firebaseApp(us-central1)
i  functions: cleaning up build files...

Error: There was an error deploying functions

显然,这个错误没有帮助,所以我进入firebase-dubug.log寻找问题的确切原因,发现了这个,

{
  "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
  "status": {
    "code": 3,
    "message": "Build failed: (node:98) Warning: To load an ES module, set \"type\": \"module\" in the package.json or use the .mjs extension.\n(Use `node --trace-warnings ...` to show where the warning was created)\n/workspace/index.js:1\nimport functions from 'firebase-functions'\n^^^^^^\n\nSyntaxError: Cannot use import statement outside a module\n    at Object.compileFunction (node:vm:352:18)\n    at wrapSafe (node:internal/modules/cjs/loader:1031:15)\n    at checkSyntax (node:internal/main/check_syntax:66:3)\n    at node:internal/main/check_syntax:39:3; Error ID: d984e68f"
  },
  "authenticationInfo": {
    "principalEmail": "[email hidden]"
  },
  "serviceName": "cloudfunctions.googleapis.com",
  "methodName": "google.cloud.functions.v1.CloudFunctionsService.UpdateFunction",
  "resourceName": "projects/[project-id, hidden]/locations/us-central1/functions/firebaseApp"
}

所以,我认为这个错误是由于没有把“类型”:“模块”放在package.json中,使用导入/导出代替了要求(),所以我去了package.json函数文件夹,并添加了类型:模块,类似这样的东西这个,

职能/package.json,

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "type": "module", // I already have this in my package.json
  "scripts": {
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "16"
  },
  "main": "index.js",
  "dependencies": {
    // ...dependencies
  },
  "private": true
}

我的index.js看起来像这样,

import functions from 'firebase-functions' // the error is caused here
import express from 'express'

// ...code which are not required for this issue :)

// Listening to port
app.listen(port, () => console.log(`Listening to port ${port}`))

// Configuring firebase
export const firebaseApp = functions.https.onRequest(app)

结论:我有类型:模块在我的package.json,但仍然得到“不能使用导入”错误。我尝试重新部署它,并使用Firebase外壳和一切工作正常,但不能使它部署。

还有一件事:我不想将它们全部转换为require(),因为这将花费永远的时间,因为这个项目上有200多个文件

共有1个答案

宿洋
2023-03-14

尝试使用要求代替。

const functions = require('firebase-functions')
 类似资料:
  • 试图将用户模型中的“uuid”作为

  • 我有一本书。节点js(07.10.19版本的node.js的最新版本)应用程序中的ts文件,带有导入节点模块而无默认导出。我使用这种结构:

  • 我有一个ApolloServer项目给我带来了麻烦,所以我想我可能会更新它,并在使用最新的巴别塔时遇到问题。我的“index.js”是: 当我运行它时,我得到了错误 首先,我试图做一些事情来说服TPTB*这是一个模块(没有成功)。所以我把“导入”改成了“要求”,这就奏效了。 但是现在我在其他文件中有大约24个“导入”给我同样的错误。 *我确信我的问题的根源是我甚至不确定是什么在抱怨这个问题。我有点

  • 在测试其中一个功能时,我遇到了这种错误。到底是什么问题? /用户/user/websprojects/hsu/src/path finding/path finding。spec.js:1从'chai'导入{expect}^^^^^^ 语法错误:无法在WrapSafe(节点:内部/模块/cjs/加载器: 1018:16)的模块外使用导入语句。_compile(节点:内部/模块/cjs/加载器: 1

  • 提前感谢您的帮助。 这个问题似乎已经在其他地方被提出和回答,但我相信我已经尝试了所有这些解决方案,但没有取得真正的进展。 我试图为webdriverIO创建一个自定义记者。然而,当所有导入都运行时,我得到以下错误: 无法在模块外使用导入语句 如果我试图执行文件顶部的导入语句,则会在导入WebdriverTestrasER行上出现上述错误。我可以通过使用要求来解决这个问题,但是在从@wdio/记者导

  • 我得到了这个错误时,试图从另一个javascript文件导入。这是我第一次尝试这样的东西。主文件是,模块文件是。 main.js: 摩登派青年js: 我怎样才能解决这个问题?谢谢