Firebase功能“本地”;档案:";依赖关系

Firebase功能“本地”;档案:";依赖关系,firebase,npm,google-cloud-functions,Firebase,Npm,Google Cloud Functions,我使用react crud shared作为react crud后端的依赖项,该后端使用Firebase云函数 在react crud后端我有以下内容: { "name": "react-crud-backend", "description": "Cloud Functions for Firebase", "scripts": { ... }, "dependencies": { ... "react-crud-shared": "file:../

我使用react crud shared作为react crud后端的依赖项,该后端使用Firebase云函数

在react crud后端
我有以下内容:

{
  "name": "react-crud-backend",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    ...
  },
  "dependencies": {
    ...
    "react-crud-shared": "file:../shared",
    ...
  },
  "engines": {
    "node": "8"
  },
  "private": true,
  "devDependencies": {
    ...
  }
}
{
  "name": "react-crud-shared",
  "version": "0.0.1",
  "description": "",
  "main": "src/index.js",
  "private": true,
  "dependencies": {
    "lodash": "^4.17.11"
  }
}
react crud shared中,我有以下信息:

{
  "name": "react-crud-backend",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    ...
  },
  "dependencies": {
    ...
    "react-crud-shared": "file:../shared",
    ...
  },
  "engines": {
    "node": "8"
  },
  "private": true,
  "devDependencies": {
    ...
  }
}
{
  "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发布私有存储库的情况下使其正常工作?


谢谢编辑:我找到了一个我更喜欢的解决方案。我在这里评论了这个github问题:。基本上,我有一个预安装脚本,运行
npm pack
,在使用firebase deploy之前在functions目录下的包上进行复制

我也有同样的问题。不太确定我将如何解决这个问题,但文档中的这些信息很有帮助():

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

注意:部署预安装的依赖项仅适用于gcloud;Firebase CLI忽略本地节点\u模块文件夹

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


不过,我不得不从firebase CLI切换到gcloud进行部署,这确实有点糟糕。Ugh.

节点单元模块
在部署时被忽略(普通)

仍然可以使用如下目录结构部署私有模块:

functions/
  index.js
  package.json
  react-crud-shared/
    package.json
{
  "dependencies": {
    ...
    "react-crud-shared": "file:./react-crud-shared"
  }
}
还有一个类似的
package.json

functions/
  index.js
  package.json
  react-crud-shared/
    package.json
{
  "dependencies": {
    ...
    "react-crud-shared": "file:./react-crud-shared"
  }
}

另一种方法是将忽略项空白:

{
  "functions": {
    "ignore": []
  }
}
只要认为第一个更好,因为这将推动整个本地
node\u模块
目录


除了这些变通方法之外


您可以通过git+https://安装内部发布的模块。我发现您的私有软件包必须位于您的cloud functions文件夹中(默认为functions)


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

如果目标是仅在web和函数之间共享模块,您可以简单地将共享包作为
文件:react crud shared
放在
函数下,然后使用
文件:../functions/react crud shared
web
引用包

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

{
  "dependencies": {
    ...
    "react-crud-shared": "file:react-crud-shared"
  }
}
{
  "dependencies": {
    ...
    "react-crud-shared": "file:../functions/react-crud-shared"
  }
}
web/package.json中

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

它在我的案例中运行得非常好,因为我使用shared
protobufjs
来创建更干净的typescript。

谢谢,我认为云源代码存储库是一个很好的解决方案。实际上,我最终复制了代码=/我将此代码用于react前端和firebase函数后端。谢谢