Deploying firebase functions with local depencies using firebase CLI

Viewed 594

Setup

I have a monorepo setup with the following file structure:

├── functions
│   ├── src
│   └── package.json
├── shared
|   ├── dist
|   ├── src
|   └── package.json
├── frontend
|    └── ...
└── firebase.json

Approach 1 (failed)

./shared is holding TypeScript classes shared among the ./backend and ./frontend. Ideally, I want to reference the shared lib from the functions/package.json using a symlink to avoid that I have to re-install after every change to my shared code (where most of the functionality resides).

However, this does not work (neither using link:, nor an absolute file: path, nor an relative file: path)

// functions/package.json
  ...
  "dependencies": {
    "shared": "file:/home/boern/Desktop/wd/monorepo/shared"
    ...
  }

resulting into an error upon firebase deploy --only functions (error Package "shared" refers to a non-existing file '"home/boern/Desktop/wd/monorepo/shared"'). The library (despite being present in ./functions/node_modules/) was not transferred to the server?

Approach 2 (failed)

Also, setting "functions": {"ignore": []} in firebase.json did not help.

Approach 4 (works, but lacks requirement a) see Goal)

The only thing that DID work, was a proposal by adevine on Github:

// functions/package.json
  ...
  "scripts": {
     ...
    "preinstall": "if [ -d ../shared ]; then npm pack ../shared; fi"
  },
  "dependencies": {
    "shared": "file:./bbshared-1.0.0.tgz"
    ...
  }

Goal

Can someone point out a way to reference a local library in a way that a) ./functions always uses an up-to-date version during development and b) deployment using the stock Firebase CLI succeeds (and not, e.g. using firelink)? Or is this simply not supported yet?

1 Answers

Here's my workaround to make approach 4 work:

rm -rf ./node_modules
yarn cache clean # THIS IS IMPORTANT
yarn install

Run this from the ./functions folder

Related