Dependency Management of IDendronExtension
As you will likely notice currently we have plenty of usage of static reach out to get an instance of
DendronExtension through call out to
getExtension() this is causing a myriad of circular dependencies.
You will also notice that
getExtension() call is now marked
@deprecated. Going forward we should be using IDendronExtension and preferably use constructor injection of
IDendronExtension. Currently the interface is injected into command constructors upon initialization.
If you are unable to constructor inject
IDendronExtension to the required dependency (there really shouldn't be a reason long term but in the medium term it could be cost prohibitive to do mass refactors), in that case use ExtensionProvider to get a hold of
Also at the time of this writing
IDendronExtension does not have everything that
DendronExtension has. The plan is to refactor piece by piece: if you need a concrete implementation that is within
DendronExtension that is not yet within
IDendronExtension the plan is to add the interface at that time.
Highly highly avoid adding concrete imports into
IDendronExtension since that will likely just re-introduce circular dependencies. Follow the Dependency inversion principle "Depend upon abstractions not concretions".
Cleaning up artifacts
out folder by running the following command
cd packages/plugin-core rm -rf out yarn compile
- Follow steps from Dendron Plugin Quickstart to get started
- Run the
Extension: Local (plugin-core)Launch Task (Private).
- Checkout a feature branch for your task
- Work on code
- Submit a Review
Dendron is actively being developed and it could be quite confusing to start developing for the first time. In this case, we recommend asking for help with whatever blockers you might have with setting up or understanding part of the codebase.
Generally, a member of the Dendron team or the community will chime in for help if you post a specific question in the
#dev channel in our Discord server.
For more information, check out our handbook entry on
Getting help for development described here
Working with the API Server
Dendron connects to a local express server which is responsible for indexing your notes. This express server also serves up static files generated by Dendron Next Server (Private).
Dendron compiles the static assets from the next server to the express server during publication so that everything is bundled when published. When you are developing, you can launch the next server independently for faster development. You can follow the instructions here (Private) to start the next-server.
To start Dendron with the next server active, you can set the following value in
dev: nextServerUrl: "http://localhost:3000"
Working with the CLI
cd packages/dendorn-cli npm link npm link -g @dendronhq/dendron-cli
Working with Verdaccio
Verdaccio is an open source local NPM registry. We use it to test out publishing and link together projects internally before publishing
- NOTE: only run verdaccio when you need to test publishing. otherwise, this will pollute the
localhostentries which will fail in CI/CD