简体   繁体   English

Firebase-节点云功能错误解析触发器:找不到模块“ firebase-functions”

[英]Firebase - Node Cloud Functions Error parsing triggers: Cannot find module 'firebase-functions'

I have continuously had this problem while trying to deploy. 尝试部署时,我一直遇到这个问题。 I was able to deploy once initially while there was only the starter 'hello, world' cloud function to firebase. 最初,只有启动器“ hello,world”云功能可以部署到Firebase时,我才能够部署一次。

I have Node 8 installed, and I realized this may be my problem. 我已经安装了Node 8,我意识到这可能是我的问题。 I did a search about it and found that it is ok as long as you specify the engine eg: 我对此进行了搜索,发现只要指定引擎即可,例如:

package.json snippet package.json代码段

 "engines": {
    "node": "8"
  },

but after I adding this I have the same result. 但是添加完之后,我得到了相同的结果。

Here is my full package.json 这是我完整的package.json

 { "name": "functions", "description": "Cloud Functions for Firebase", "scripts": { "serve": "firebase serve --only functions", "shell": "firebase functions:shell", "start": "npm run shell", "deploy": "firebase deploy --only functions", "logs": "firebase functions:log" }, "dependencies": { "@google-cloud/storage": "^2.0.3", "busboy": "^0.2.14", "cors": "^2.8.4", "firebase-admin": "^6.0.0", "firebase-functions": "^2.0.5", "request-promise": "^4.2.2", "uuid": "^3.3.2" }, "engines": { "node": "8" }, "private": true } 

and here is my index.js in my functions folder 这是我的functions文件夹中的index.js

 'use strict'; // // Create and Deploy Your First Cloud Functions // // https://firebase.google.com/docs/functions/write-firebase-functions // const functions = require('firebase-functions'); const cors = require('cors')({ origin: true }); const Busboy = require('busboy'); const os = require('os'); const path = require('path'); const fs = require('fs'); const fbAdmin = require('firebase-admin'); const uuid = require('uuid/v4'); // exports.helloWorld = functions.https.onRequest((request, response) => { // response.send("Hello from Firebase!"); // }); const gcconfig = { projectId: 'rs-0001', keyFilename: 'rs-0001.json' }; const gcs = require('@google-cloud/storage')(gcconfig); // exports.helloWorld = functions.https.onRequest((request, response) => { // response.send("Hello from Firebase!"); // }); fbAdmin.initializeApp({ credential: fbAdmin.credential.cert(require('./rs-0001.json')) }); exports.storeImage = functions.https.onRequest((req, res) => { return cors(req, res, () => { if (req.method !== 'POST') { return res.status(500).json({ message: 'Not allowed.' }); } if ( !req.headers.authorization || !req.headers.authorization.startsWith('Bearer ') ) { return res.status(401).json({ error: 'Unauthorized.' }); } let idToken; idToken = req.headers.authorization.split('Bearer ')[1]; const busboy = new Busboy({ headers: req.headers }); let uploadData; let oldImagePath; busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { const filePath = path.join(os.tmpdir(), filename); uploadData = { filePath: filePath, type: mimetype, name: filename }; file.pipe(fs.createWriteStream(filePath)); }); busboy.on('field', (fieldname, value) => { oldImagePath = decodeURIComponent(value); }); busboy.on('finish', () => { const bucket = gcs.bucket('rs-0001.appspot.com'); const id = uuid(); let imagePath = 'images/' + id + '-' + uploadData.name; if (oldImagePath) { imagePath = oldImagePath; } return fbAdmin .auth() .verifyIdToken(idToken) .then(decodedToken => { return bucket.upload(uploadData.filePath, { uploadType: 'media', destination: imagePath, metadata: { metadata: { contentType: uploadData.type, firebaseStorageDownloadTokens: id } } }); }) .then(() => { return res.status(201).json({ imageUrl: 'https://firebasestorage.googleapis.com/v0/b/' + bucket.name + '/o/' + encodeURIComponent(imagePath) + '?alt=media&token=' + id, imagePath: imagePath }); return null }) .catch(error => { return res.status(401).json({ error: 'Unauthorized!' }); }); }); return busboy.end(req.rawBody); }); }); 

I have used prior suggestions to similar issues suggesting to go to the /functions/ directory and doing an npm install , then proceeding to go to the previous directory and run 对于类似的问题,我已经使用了先前的建议,建议先转到/ functions /目录并执行npm install ,然后继续转到上一个目录并运行

firebase deploy --only functions

which takes me back to 这带我回到

 i functions: preparing functions directory for uploading... Error: Error parsing triggers: Cannot find module 'firebase-functions' Try running "npm install" in your functions directory before deploying. 

I have ran it with the --debug on, to receive 我已经在--debug上运行了它,以接收

 i functions: preparing functions directory for uploading... [2018-10-04T15:34:29.744Z] >>> HTTP REQUEST GET https://runtimeconfig.googleapis.com/v1beta1/projects/rs-0001/configs [2018-10-04T15:34:31.249Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8,vary=X-Origin, Referer, Origin,Accept-Encoding, date=Thu, 04 Oct 2018 15:34:31 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="44,43,39,35", accept-ranges=none, connection=close Error: Error parsing triggers: Cannot find module 'firebase-functions' Try running "npm install" in your functions directory before deploying. 

I have even tried 我什至尝试过

 cd functions && sudo npm i && cd .. && firebase deploy --only functions --debug

to come with the same result. 得到相同的结果。 I have spent hours seemingly with the same problem, deleted node_modules, installed all packages individually, etc. Can someone help? 我似乎花了几个小时来解决相​​同的问题,删除了node_modules,单独安装了所有软件包,等等。有人可以帮忙吗?

node -v

v8.12.0 v8.12.0

npm -v

6.4.1 6.4.1

and I installed firebase-tools globally at the latest version, and have the .json for the project in the same directory... 并且我以最新版本全局安装了firebase-tools,并将该项目的.json放在同一目录中...

Try this. 尝试这个。

  1. Run this code locally using either 使用以下任一方法在本地运行此代码

    • firebase functions:shell or firebase functions:shell
    • firebase serve --only functions

    See this for more details. 请参阅了解更多详情。

  2. Look for detailed stack trace in firebase-debug.log file that will be generated in you directory. 在将在您的目录中生成的firebase-debug.log文件中查找详细的堆栈跟踪。

There was an incompatible package. 有一个不兼容的程序包。

    "@google-cloud/storage": "^2.0.3",

needed to be 需要成为

    "@google-cloud/storage": "^1.7.0",

for some reason, after this I was able to upload. 由于某种原因,之后我就可以上传了。 Here is the working version of my functions/index.js 这是我的functions / index.js的工作版本

    'use strict';

const functions = require('firebase-functions');
const cors = require('cors')({origin: true});
const Busboy = require('busboy');
const os = require('os');
const path = require('path');
const fs = require('fs');
const fbAdmin = require('firebase-admin');
const uuid = require('uuid/v4');
// // 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!");
// });
const gcconfig = {
    projectId: 'rs-0001',
    keyFilename: 'rs-0001.json'
};

const gcs = require('@google-cloud/storage')(gcconfig);

fbAdmin.initializeApp({credential: fbAdmin.credential.cert(require('./rs-0001.json'))})

exports.storeImage = functions.https.onRequest((request, response) => {
    return cors(req, res, () => {
        if (req.method !== 'POST') {
            return res.status(500).json({message: 'Not allowed mofo.' });
        }
    if (!req.headers.authorization ||
        !req.headers.authorization.startsWith('Bearer ')
        ) { 
        return res.status(401).json({ error: 'Unauthorized '});
    }

    let idToken;
    idToken = req.headers.authorization.split('Bearer ')[1];

    const busboy = new Busboy({headers: req.headers});
    let uploadData;

    busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
        const filePath = path.join(os.tmpdir(), filename);
        uploadData = {filePath: filePath, type: mimetype, name: filename};
        file.pipe(fs.createWriteStream(filePath));
    });

    busboy.on('field', (fieldname, value) => {
        oldImagePath = decodeURIComponent(value);
    })

    busboy.on('finish', () => {
        const bucket = gcs.bucket('rs-0001.appspot.com');
        const id = uuid();
        let imagePath = 'images/' + id + '-' + uploadData.name
        if (oldImagePath) {
            imagePath = oldImagePath;

        }

        return fbAdmin
        .auth()
        .verufyIdToken(idToken)
        .then(decodedToken => {
            return bucket.upload(uploadData.filePath, {
                uploadType: 'media',
                destination: imagePath,
                metadata: {
                    metadata: {
                        contentType: uploadData.type,
                        firebaseStorageDownloadToken: id
                    }
                }
            });
        })
        .then(() => {
            return res.status(201).json({
                imageUrl: 
                    'https://firebasestorage.googleapis.com/v0/b/' + 
                    bucket.name + 
                    '/o/' + 
                    encodeURIComponent(imagePath) + 
                    '?alt=media&token' + 
                    id,
                imagePath: imagePath
            });
        })
        .catch(error => {
            return res.status(401).json({ error: 'Unauthorized!' });
        });
    });
    return busboy.end(req.rawBody);
    });
});

and here is my full package.json now, 这是我完整的package.json现在,

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "@google-cloud/common": "^0.25.3",
    "@google-cloud/paginator": "^0.1.1",
    "@google-cloud/storage": "^1.7.0",
    "busboy": "^0.2.14",
    "cors": "^2.8.4",
    "firebase": "^5.5.3",
    "firebase-admin": "^6.0.0",
    "firebase-functions": "^2.0.5",
    "gcs-resumable-upload": "^0.13.0",
    "split-array-stream": "^2.0.0",
    "uuid": "^3.3.2"
  },
  "private": true
}

thanks all for your answers. 谢谢大家的回答。 I hope my solution can help someone 我希望我的解决方案可以帮助某人

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:解析触发器错误:找不到模块“ firebase-functions” - Error: Error parsing triggers: Cannot find module 'firebase-functions' Cloud Functions for Firebase firebase 部署错误:“解析触发器时出错:找不到模块‘firebase-admin’” - Cloud Functions for Firebase firebase deploy error: "Error parsing triggers: Cannot find module 'firebase-admin'" 找不到模块'firebase-functions' - Cannot find module 'firebase-functions' 部署 firebase 项目时出现错误显示“找不到模块 firebase-functions” - Error shows 'cannot find module firebase-functions' when deploying a firebase project Cloud Functions,Firebase:解析函数触发错误 - Cloud Functions, Firebase: parsing function triggers error Firebase 云函数:“解析 function 触发器时出错” - Firebase Cloud Functions: 'Error occurred while parsing your function triggers' Firebase 函数错误:找不到模块“诊断” - Firebase functions Error: Cannot find module 'diagnostics' 在哪里可以找到firebase-admin下所有可用功能的列表? firebase功能? - Where can one find the list of all functions available under firebase-admin? firebase-functions? Firebase 函数项目上的 VS Code“找不到模块”错误 - VS Code "Cannot find module" error on Firebase Functions Project firebase-functions 中的 Sendgrid 导入问题 - Sendgrid import issue in firebase-functions
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM