尝试部署 Firebase 功能时出现 ESLint 错误

Posted

技术标签:

【中文标题】尝试部署 Firebase 功能时出现 ESLint 错误【英文标题】:ESLint error while trying to deploy firebase functions 【发布时间】:2018-07-14 03:27:36 【问题描述】:

我尝试部署一个 firebase 函数,但由于 ESLint 的一些问题,它一直失败。我也试过用谷歌搜索答案,但我看到的一切对我来说都是希腊语。

我也偶然发现了 this 和 this 的答案,但它们似乎不适用于我的场景。

我的功能

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => 
//  response.send("Hello from Firebase!");
// );


//import firebase functions modules
const functions = require("firebase-functions");
//import admin module
const admin = require("firebase-admin");
admin.initializeApp(functions.config().firebase);

// Listens for new messages added to messages/:pushId
exports.pushNotification = functions.database.ref("/Message").onWrite( event => 
    //  Grab the current value of what was written to the Realtime Database.
    var valueObject = event.data.val();
    // Log the event
    console.log("Push notification event triggered for " + valueObject.title);

    //if(valueObject.title != null) 
      //valueObject.photoUrl= "Sent you a photo!";
   // 

  // Create a notification
    const payload = 
        data: 
            body:valueObject.body,
            imgUrl: valueObject.imgUrl,
            postUrl: valueObject.postUrl,
            title: valueObject.title
        ,
    ;

  //Create an options object that contains the time to live for the notification and the priority
    const options = 
        priority: "high",
        timeToLive: 60 * 60 * 24
    ;


    return admin.messaging().sendToTopic("Posts", payload, options);
);

日志

0 info it worked if it ends with ok
1 verbose cli [ '/home/xoxo/.nvm/versions/node/v9.5.0/bin/node',
1 verbose cli   '/home/xoxo/.nvm/versions/node/v9.5.0/bin/npm',
1 verbose cli   '--prefix',
1 verbose cli   '/home/xoxo/android/Projects/FirebaseFunctions/functions',
1 verbose cli   'run',
1 verbose cli   'lint' ]
2 info using npm@5.6.0
3 info using node@v9.5.0
4 verbose run-script [ 'prelint', 'lint', 'postlint' ]
5 info lifecycle functions@~prelint: functions@
6 info lifecycle functions@~lint: functions@
7 verbose lifecycle functions@~lint: unsafe-perm in lifecycle true
8 verbose lifecycle functions@~lint: PATH: /home/xoxo/.nvm/versions/node/v9.5.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/xoxo/Android/Projects/FirebaseFunctions/functions/node_modules/.bin:/home/xoxo/.nvm/versions/node/v9.5.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
9 verbose lifecycle functions@~lint: CWD: /home/xoxo/Android/Projects/FirebaseFunctions/functions
10 silly lifecycle functions@~lint: Args: [ '-c', 'eslint .' ]
11 info lifecycle functions@~lint: Failed to exec lint script
12 verbose stack Error: functions@ lint: `eslint .`
12 verbose stack spawn ENOENT
12 verbose stack     at ChildProcess.<anonymous> (/home/xoxo/.nvm/versions/node/v9.5.0/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:48:18)
12 verbose stack     at ChildProcess.emit (events.js:160:13)
12 verbose stack     at maybeClose (internal/child_process.js:943:16)
12 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5)
13 verbose pkgid functions@
14 verbose cwd /home/xoxo/Android/Projects/FirebaseFunctions
15 verbose Linux 4.13.0-32-generic
16 verbose argv "/home/xoxo/.nvm/versions/node/v9.5.0/bin/node" "/home/xoxo/.nvm/versions/node/v9.5.0/bin/npm" "--prefix" "/home/xoxo/Android/Projects/FirebaseFunctions/functions" "run" "lint"
17 verbose node v9.5.0
18 verbose npm  v5.6.0
19 error file sh
20 error code ELIFECYCLE
21 error errno ENOENT
22 error syscall spawn
23 error functions@ lint: `eslint .`
23 error spawn ENOENT
24 error Failed at the functions@ lint script.
24 error This is probably not a problem with npm. There is likely additional logging output above.
25 verbose exit [ 1, true ]

控制台输出

xoxo@xo9:~/Android/Projects/FirebaseFunctions$ firebase deploy

=== Deploying to 'testproject-a1bda'...

i  deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint

> functions@ lint /home/xoxo/Android/Projects/FirebaseFunctions/functions
> eslint .

sh: 1: eslint: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! functions@ lint: `eslint .`
npm ERR! spawn ENOENT
npm ERR! 
npm ERR! Failed at the functions@ lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/xoxo/.npm/_logs/2018-02-03T22_35_55_608Z-debug.log

Error: functions predeploy error: Command terminated with non-zero exit code1

Package.js


  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": 
    "lint": "./node_modules/.bin/eslint .",
    "serve": "firebase serve --only functions",
    "shell": "firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  ,
  "dependencies": 
    "firebase-admin": "~5.8.1",
    "firebase-functions": "^0.8.1"
  ,
  "devDependencies": 
    "eslint": "^4.12.0",
    "eslint-plugin-promise": "^3.6.0"
  ,
  "private": true

请问我做错了什么?

【问题讨论】:

请显示来自firebase deploy 的正常控制台输出,而不是来自 npm 的调试输出。 @DougStevenson,谢谢。请我添加它 您似乎要求 Firebase CLI 使用 ESLint 检查您的代码,但后来设法以某种方式不安装或卸载它。你的 package.json 是什么样的? 实际上,如果您能够验证您在设置具有这种行为方式的项目时所采取的确切步骤,那将非常有帮助。 @DougStevenson 我已经添加了 package.js 的内容 【参考方案1】:

我可以想象您的项目进入这种状态的唯一方法是如果您在项目创建时拒绝允许 npm 安装依赖项。所以当你问这个问题时:

?你想现在用 npm 安装依赖吗?

您可能已经回答“不”。这会阻止安装 eslint 包,您会看到该错误。

否则,你可能以某种方式删除了node_modules下的eslint安装包。您可以从 functions 文件夹运行 npm install 以重新创建 node_modules 下所需的所有内容。

【讨论】:

仅供参考,我刚刚通过将我的项目复制到一个新目录中收到了这个错误。尽管如此,导航到功能并按照建议运行rm -rf node_modules/ &amp;&amp; npm installnpm cache clean --force 已修复它。谢谢! 非常适合我,我认为缺少 ESLint 依赖项, 请务必注意,您必须从 functions 文件夹而不是项目文件夹中运行 npm install。我错过了那部分。 谢谢兄弟,你救了我的命!【参考方案2】:

轻松修复。 在你的 package.json 里面改变

> "lint": "eslint ."

"lint": "eslint",

【讨论】:

【参考方案3】:

遇到同样的问题 我重新安装了npm

npm install npm -g

然后重新启动 Firebase 功能(您必须覆盖所有文件并确保安装 EsLine 调试并安装所有依赖项)是的,任何请求都按 Y

Firebase init functions

再次部署后一切正常

Firebase deploy

【讨论】:

【参考方案4】:

如果您在部署 firebase 项目时发现 -prefix "%REASOURCE_DIR%" 运行初始化类型错误,那么您必须在 firebase.json 文件中编辑一些代码。这是一个例子

【讨论】:

去掉这个 eslint 有什么副作用? 只是不会运行 linting 并由于其中的错误而停止部署。不是解决任何 eslint 依赖项的最佳实践。在此期间,这对我有用,但只是为了开始。【参考方案5】:

嘿,你只需要从 then 语句中返回一些东西

let params = ...;
var firestore = admin.firestore();
var dbRef = firestore.collection('your-collection-name');

dbRef.add(params)
     .then((docRef) => 
       console.log("doc added with ID ", docRef.id);

       return null
     )
     .catch((err) => 
       console.error("Error in adding document ", err);
     );

【讨论】:

【参考方案6】:

我出现了类似的错误。我发现保存 firebase 项目的目录名为 firebase/database。我删除了 / 并将目录名称设为 firebase-database。希望这可以帮助某人。

【讨论】:

【参考方案7】:

我在 Windows 上遇到了类似的 ESLINT 问题

我只是为了调用 firebase deploy 命令而破坏了 npm run deploy。这个调用让我可以查看“firebase deploy”命令执行之外的错误,有趣的是 Eslint 与文件存在 CLRF 冲突

然后我运行 npm run lint -- --fix 并且这些问题得到了解决

:D

【讨论】:

以上是关于尝试部署 Firebase 功能时出现 ESLint 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 中部署功能时出现 Firebase 未找到错误

部署函数时出现 Firebase 部署错误

NodeJS Firebase 功能在部署后失败

使用 Firebase 云功能时出现 Stackdriver 错误“未配置结算帐户”

将 android studio 项目与 Firebase 集成以实现 google 登录功能时出现依赖错误

Firebase Cloud Functions 部署错误 - 超出配额