This repository provides a quick and easy way to setup a local FlowFuse development environment.
-
Clone this repository
-
Install npm though a Node version manager (e.g. NVM, Volta) or with a custom global install directory.
-
In the root of this repository run:
npm install npm run init
This will install the immediate dependencies of the development environment, clone all of the required repositories under the
packages
directory, link the packages to one another, then install all of the dependencies of those repositories. It will then runnpm run build
on any of the repositories that require it.
You can now start developing the code normally in the directories under packages
.
dev-env
├── LICENSE
├── README.md
├── lib
├── package.json
└── packages
├── flowfuse
│ └── ...
├── driver-localfs
│ └── ...
.... and all the other repos
After running npm run init
, you will be able to start FlowFuse with its default
configuration by running:
cd packages/flowfuse
npm run start
To run in development mode, where it automatically rebuilds the frontend and restarts the application when changes are made, run:
cd packages/flowfuse
npm run serve
More details on how to develop FlowFuse itself are provided in the main docs.
Do not run npm install
in one of the repository directories under packages
.
If you do, you'll need to delete the node_modules
directory that gets created.
If you need to modify a repository's dependencies:
- Edit its
package.json
to add the dependencies in the normal way - Run
npm install
in the root of this repository.
Setup the development environment. You can run this repeatedly - such as when a new repository has been added that you need to add to your environment
Get the current status of each repository, including what branch they have checked out
and whether there are unstaged (*
) and staged (+
) changes.
For example:
Package git status
+ flowfuse (main *+)
...
For each repository on the main
branch, pull the latest code.
Run any git command on each repostory. For example, to ensure all repositories are on the main branch:
npm run git checkout main
The FlowFuse platform consists of a number of npm modules. Each module is maintained in its own git repository. When developing the code and you need to make changes across multiple modules, you want to be sure the your development code is loaded.
We used to achieve that by running a script that modified the package.json of which module to point to a relative location. That left the package.json file modified and would get in the way when committing and merging changes.
Thankfully, npm workspaces solves that particular problem. Whilst it is more often used in monorepos, this repo provides the setup required to get them working with our multiple repositories.
You can run any command in all repos using either of the following methods:
-
npm exec
npm exec --ws -- /usr/bin/git checkout main
However the command will require a full path and you cannot use shell built-ins.
-
find ...
find packages -name .git -type d -exec git checkout main
By default FlowFuse uses SQLite for development. Given production systems do not tend to use SQLite but PostgreSQL (PG) it's advised to run PG for development too. As prerequisite, one should install PG on their own system.
To use PG as development database ensure packages/flowfuse/etc/flowforge.local.yml
has postgres
set as database type. The host must be set to an absolute path
to the root FlowFuse/dev-env
repository with data
appended. For example:
db:
logging: false
type: postgres
host: /path/to/flowfuse-dev-env/data
port: 54321
Than run npm run init
to setup your database.
Start the server by running postgres -s -D ./data/pg -k $(pwd)/data -p 54321
from the root directory, and keep the terminal window open. Just once you'll
need to run createdb -h $(pwd)/data -p 54321 flowforge
.