Firebase Functions本地“文件:”依赖项

时间:2019-01-31 10:45:58

标签: firebase npm google-cloud-functions

我正在使用 react-crud-shared 作为 react-crud-backend 的依赖,后者使用 Firebase Cloud Functions

>

react-crud-backend ,我有以下内容:

{
  "name": "react-crud-backend",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    ...
  },
  "dependencies": {
    ...
    "react-crud-shared": "file:../shared",
    ...
  },
  "engines": {
    "node": "8"
  },
  "private": true,
  "devDependencies": {
    ...
  }
}

react-crud-shared ,我有以下内容:

{
  "name": "react-crud-shared",
  "version": "0.0.1",
  "description": "",
  "main": "src/index.js",
  "private": true,
  "dependencies": {
    "lodash": "^4.17.11"
  }
}

它在开发中工作正常:“ firebase仅提供功能”,但在部署时会引发错误:

Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'react-crud-shared'

是否有一种方法可以使其工作而不必将私有存储库发布到NPM?

谢谢

4 个答案:

答案 0 :(得分:1)

编辑:我找到了一个我更喜欢的解决方案。我在这里对这个github问题发表了评论:https://github.com/firebase/firebase-tools/issues/968#issuecomment-460323113。基本上,我有一个预安装脚本,运行npm pack,可以在使用firebase deploy之前复制到功能目录下的程序包。

FWIW我有完全相同的问题。不确定我要如何解决该问题,但是文档中的此信息很有帮助(https://firebase.google.com/docs/functions/handle-dependencies):

  

要为您的函数指定依赖项,请将其添加到package.json文件中。如果要通过gcloud命令行工具进行部署,则还可以预安装依赖项,并将其与功能一起部署。默认情况下,node_modules文件夹将添加到您的.gcloudignore文件中,并且不会作为部署的一部分上载。要部署预安装的依赖项,请在部署功能之前从.gcloudignore文件中删除node_modules/。

     

注意:部署预安装的依赖项仅适用于gcloud。 Firebase CLI会忽略本地的node_modules文件夹。

因此,看来您可以先在本地运行“ npm install”,然后使用gcloud进行部署,因为它将复制您的node_modules目录,其中将有您的对等依赖项。

但是,确实有点恶臭,我必须从firebase CLI切换到gcloud进行部署。 gh。

答案 1 :(得分:1)

在部署中通常忽略

df.groupby

一个人仍然可以部署具有如下目录结构的私有模块:

import pandas as pd


df = pd.DataFrame({'A': [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5], 
                   'B': [1,2,3,1,2,3,1,2,3,1,2,3,1,2,3]})

mean_df = df.groupby('A')['B'].mean()

# perform the sum, reversing the order to do a forward sum
rolling_sum = mean_df.iloc[::-1].rolling(3, min_periods=0).sum().iloc[::-1]

{ path: '', component: ChatPage, children: [ { path: 'active', component: ActivePage }, { path: 'messages', component: MessagesPage }, { path: 'teams', component: TeamsPage } ] }, 类似:

DATEDIFF

另一种方法是清空忽略项:

MAX

只是认为第一个比较好,因为这会推送整个本地node_modules目录。


除了这些解决方法...

一个人可以通过functions/ index.js package.json react-crud-shared/ package.json Cloud Source Repositories安装内部发布的模块。

答案 2 :(得分:1)

如果目标是仅在网络和功能之间共享模块,则可以简单地将共享包放在functions下,称为file:react-crud-shared,然后使用{{1 }}。

web

file:../functions/react-crud-shared

functions/
  package.json
  ...
  react-crud-shared/
    package.json
    ...
web/
  package.json
  ...

functions/package.json

{
  "dependencies": {
    ...
    "react-crud-shared": "file:react-crud-shared"
  }
}

因为我使用共享的web/package.json作为更清洁的打字稿,所以对于我的情况来说,它工作得很好。

答案 3 :(得分:0)

我发现您的私有软件包的位置必须在云功能文件夹内(默认为功能)

因此,如果将私有软件包移动到云函数文件夹中,并在package.json中正确设置该软件包的路径,则它应该可以工作。