vue-cli v3 与 node.js firebase 函数,firebase 托管(错误:在函数源目录中找不到 npm 包)

Posted

技术标签:

【中文标题】vue-cli v3 与 node.js firebase 函数,firebase 托管(错误:在函数源目录中找不到 npm 包)【英文标题】:vue-cli v3 with node.js firebase functions, firebase hosting (Error: No npm package found in functions source directory) 【发布时间】:2019-01-31 03:02:19 【问题描述】:

我想将 Vue.js 用于前端和 Firebase 函数 (Express.js) + Firestore 用于后端。

0-step:我在 Google Firebase 上创建了一个新项目,我创建了一个具有所有者权限的新服务帐户(稍后与 Admin SDK 一起使用)

第一步:我安装了 vue-cli v3 并创建了项目:

$ vue create my-project
$ npm run serve //localhost:8080 OK

第二步:

$npm install firebase firebase-admin firebase-functions --save

文件夹结构:

my-project
  .firebaserc //created (edited) manually
  babel.config.js
  firebase.json //created (edited) manually
  package.json
  dist
  node_modules
  public
  src
    assets
    components
    firebase
      functions
        index.js //here are my functions
      service-accounts
    views

firebase.json:(从其他项目复制并手动编辑)


  "functions:": 
    "source": "src/firebase/functions"
  ,
  "hosting": 
    "public": "public",
    "ignore": [...]
  

src/functions/index.js:

import functions from 'firebase-functions';
import admin from 'firebase-admin';

const serviceAccount = require('../service-accounts/owner-key.json');
admin.initializeApp(
  credentials: admin.credencial.cert(serviceAccount),
  databaseURL: 'my-project.firebaseio.com'
)
const db = admin.firestore();
...

package.json 文件中我添加了额外的脚本:

"deploy": "vue-cli-service build && firebase deploy --only hosting,functions"

但是当我运行“npm run deploy”命令时,我收到一个错误:

在函数源目录中找不到 npm 包。请在 src/firebase/functions 中运行“npm init”

我的问题是下一个:为什么它只需要在函数源目录中安装 firebase 函数包,我可以使用我安装在*** node_modules 文件夹中的 firebase-functions 吗?

【问题讨论】:

【参考方案1】:

我找到了对此类错误的解释: Github: firebase.json option "functions.source"...

firebase-tools 在进行函数模拟或部署时只查看函数文件夹。这是一个经过深思熟虑的设计选择,在部署目标(函数、托管等)之间进行隔离。在部署函数时,整个函数文件夹被压缩(忽略 node_modules)并部署。部署后,服务器通过查看 package.json 中的内容并从 npm 中提取依赖项来“构建”项目。未部署项目根目录。因此,模拟器仅通过查看函数文件夹来模拟部署行为。

firebase.json 项目根文件夹中的文件:


  "functions:": 
    "source": "src/functions"
  ,
  "hosting": 
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  

并且在根项目文件夹的主 package.json 中我添加了一行:

"scripts": 
  "postinstall": "cd src/functions && npm install"
,

毕竟我进入了 /src/functions 文件夹并安装了 Express.js:

cd src/functions && npm install express --save

【讨论】:

我面临着类似的问题。你能看看这个***.com/questions/56523054/…【参考方案2】:

我建议您将这两个项目分开,特别是不要将 Firebase Cloud Functions 目录放在 vue.js 项目文件夹中。

换句话说:

1/ 使用 vue.js CLI 将您的 vue.js 项目创建为“独立”的 vue.js 前端项目

2/ 像往常一样通过 Firebase CLI 在完全不同的位置创建您的 Firebase 项目。

3/ 当你想部署你的 vue.js 前端应用时,构建你的 vue.js 应用并将 dist 文件夹的内容复制到 Firebase 项目的 public 文件夹中

4/ 使用 firebase deploy --only hosting,functions(或 firebase deploy --only functionsfirebase deploy --only hosting...)部署 Firebase 项目

您可以在步骤 3 中自动复制。

【讨论】:

对不起,稍后这个项目将上传到我们的bitbucket上,其他人将使用它来开发自己的版本(具有其他功能),并且只使用$ npm install命令会很棒。 . 还有,下一个想法 - 创建我们自己的 API,我想用它来异步下载 vue 单文件组件(作为静态文件) 我明白了。有兴趣知道如何“混合”这两个 CLI,并想知道是否有人有解决方案。 @RenaudTarnec 我遇到了类似的问题。你能看看这个吗? ***.com/questions/56516147/… @PvDev 您的具体问题是什么?不清楚。您可以创建一个包含所有详细信息的新问题。 实际上我有客户端和服务器两部分。客户端使用 vuejs 完成,服务器使用 nodejs 完成。我在firebase托管中托管。在服务器-> app.js中,我一直在使用支付api url进行支付,如果支付成功,它将响应状态代码发送到前端[客户端]。我的问题是,当将所有内容移至生产服务器端 api 时不起作用,但在 localhost 中一切正常。不知道我在 firebase.json 或 server-> package.json 或 base url 中哪里出错了。最初在客户端 -> service-> api.js,我设置了 base url: localhost 现在我已经更新到 dev.xx。 firebaseapp.com.

以上是关于vue-cli v3 与 node.js firebase 函数,firebase 托管(错误:在函数源目录中找不到 npm 包)的主要内容,如果未能解决你的问题,请参考以下文章

将 Forge Node.js SDK 与“Forge Design Automation v3”一起使用

将 sass-resources-loader 与 vue-cli v3.x 一起使用

一分钟教你快速 搭建Vue脚手架(Vue-Cli)项目并整合ElementUI

一分钟教你快速 搭建Vue脚手架(Vue-Cli)项目并整合ElementUI

Node.js webpack Vue-CLI --安装

npm webpack vue-cli