mirror of
https://github.com/bpatrik/pigallery2.git
synced 2024-12-23 01:27:14 +02:00
Merge pull request #896 from moiseyenkoVladyslav/master
docs: Change from intall to install
This commit is contained in:
commit
7a6021785d
@ -7,7 +7,7 @@ See sample extension at https://github.com/bpatrik/pigallery2-sample-extension.
|
|||||||
# Extension Usage
|
# Extension Usage
|
||||||
|
|
||||||
Extension folder can be set through config. For the docker-ised version,
|
Extension folder can be set through config. For the docker-ised version,
|
||||||
they live under the `config/extension` folder in their own subdirectory.
|
they live under the `config/extension` folder in their own subdirectory.
|
||||||
|
|
||||||
# Extension development
|
# Extension development
|
||||||
|
|
||||||
@ -21,16 +21,20 @@ You need at least a `server.js` in your extension folder that exports a `init(ex
|
|||||||
<path to the extension fodler>/myextension/package.js <- this is optional. You can add extra npm packages here
|
<path to the extension fodler>/myextension/package.js <- this is optional. You can add extra npm packages here
|
||||||
<path to the extension fodler>/myextension/server.js <- this is needed
|
<path to the extension fodler>/myextension/server.js <- this is needed
|
||||||
```
|
```
|
||||||
|
|
||||||
Where `<path to the extension fodler>` is what you set in the config and `myextension` is the name of your extension.
|
Where `<path to the extension fodler>` is what you set in the config and `myextension` is the name of your extension.
|
||||||
Note: you do not need to add your `node_modules` folder. The app will call `npm intall` when initializing your extension.
|
Note: you do not need to add your `node_modules` folder. The app will call `npm install` when initializing your extension.
|
||||||
|
|
||||||
## Extension environment
|
## Extension environment
|
||||||
|
|
||||||
The app runs the extension the following way:
|
The app runs the extension the following way:
|
||||||
* It reads all extensions in `<path to the extension fodler>/**` folder
|
|
||||||
* Checks if `package.js` is present. If yes installs the packages
|
- It reads all extensions in `<path to the extension fodler>/**` folder
|
||||||
* Checks if `server.js` is present. If yes, calls the `init` function.
|
- Checks if `package.js` is present. If yes installs the packages
|
||||||
|
- Checks if `server.js` is present. If yes, calls the `init` function.
|
||||||
|
|
||||||
### Init and cleanup lifecycle
|
### Init and cleanup lifecycle
|
||||||
|
|
||||||
There is also a `cleanUp` function that you can implement in your extension.
|
There is also a `cleanUp` function that you can implement in your extension.
|
||||||
The app can call your `init` and `cleanUp` functions any time.
|
The app can call your `init` and `cleanUp` functions any time.
|
||||||
Always calls the `init` first then `cleanUp` later.
|
Always calls the `init` first then `cleanUp` later.
|
||||||
@ -39,8 +43,7 @@ Main use-case: `init` is called on app startup. `cleanUp` and `init` called late
|
|||||||
## Extension interface
|
## Extension interface
|
||||||
|
|
||||||
The app calls the `init` and `cleanUp` function with a `IExtensionObject` object.
|
The app calls the `init` and `cleanUp` function with a `IExtensionObject` object.
|
||||||
See https://github.com/bpatrik/pigallery2/blob/master/src/backend/model/extension/IExtension.ts for details.
|
See https://github.com/bpatrik/pigallery2/blob/master/src/backend/model/extension/IExtension.ts for details.
|
||||||
|
|
||||||
|
|
||||||
`IExtensionObject` exposes lifecycle events, configs, RestAPis with some limitation.
|
`IExtensionObject` exposes lifecycle events, configs, RestAPis with some limitation.
|
||||||
Changes made during the these public apis you do not need to clean up in the `cleanUp` function.
|
Changes made during the these public apis you do not need to clean up in the `cleanUp` function.
|
||||||
@ -50,7 +53,7 @@ App also exposes private `_app` object to provide access to low level API. Any c
|
|||||||
|
|
||||||
See sample server.js at https://github.com/bpatrik/pigallery2-sample-extension.
|
See sample server.js at https://github.com/bpatrik/pigallery2-sample-extension.
|
||||||
|
|
||||||
It is recommended to do the development in `ts`, so creating a `server.ts`.
|
It is recommended to do the development in `ts`, so creating a `server.ts`.
|
||||||
Note: You need to manually transpile your `server.ts` file to `server.js` as the app does not do that for you.
|
Note: You need to manually transpile your `server.ts` file to `server.js` as the app does not do that for you.
|
||||||
This doc assumes you do the development in `ts`.
|
This doc assumes you do the development in `ts`.
|
||||||
|
|
||||||
@ -59,23 +62,23 @@ This doc assumes you do the development in `ts`.
|
|||||||
You can import package from both the main app package.json and from your extension package.json.
|
You can import package from both the main app package.json and from your extension package.json.
|
||||||
To import packages from the main app, you import as usual.
|
To import packages from the main app, you import as usual.
|
||||||
For packages from the extension, you always need to write relative path. i.e.: prefix with `./node_modules`
|
For packages from the extension, you always need to write relative path. i.e.: prefix with `./node_modules`
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
// Including dev-kit interfaces. It is not necessary, only helps development with types.
|
// Including dev-kit interfaces. It is not necessary, only helps development with types.
|
||||||
// You need to prefix them with ./node_modules
|
// You need to prefix them with ./node_modules
|
||||||
import {IExtensionObject} from './node_modules/pigallery2-extension-kit';
|
import { IExtensionObject } from "./node_modules/pigallery2-extension-kit";
|
||||||
|
|
||||||
// Including prod extension packages. You need to prefix them with ./node_modules
|
// Including prod extension packages. You need to prefix them with ./node_modules
|
||||||
// lodash does not have types
|
// lodash does not have types
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import * as _ from './node_modules/lodash';
|
import * as _ from "./node_modules/lodash";
|
||||||
|
|
||||||
// Importing packages that are available in the main app (listed in the packages.json in pigallery2)
|
// Importing packages that are available in the main app (listed in the packages.json in pigallery2)
|
||||||
import {Column, Entity, Index, PrimaryGeneratedColumn} from 'typeorm';
|
import { Column, Entity, Index, PrimaryGeneratedColumn } from "typeorm";
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### pigallery2 extension dev-kit
|
||||||
#### pigallery2 extension dev-kit
|
|
||||||
|
|
||||||
It is recommended to use the `pigallery2-extension-kit` node package.
|
It is recommended to use the `pigallery2-extension-kit` node package.
|
||||||
`npm install pigallery2-extension-kit --save` to your extension.
|
`npm install pigallery2-extension-kit --save` to your extension.
|
||||||
@ -87,17 +90,14 @@ You can then `import {IExtensionObject} from './node_modules/pigallery2-extensio
|
|||||||
|
|
||||||
See https://github.com/bpatrik/pigallery2/blob/master/src/backend/model/extension/IExtension.ts to understand what contains `IExtensionObject`.
|
See https://github.com/bpatrik/pigallery2/blob/master/src/backend/model/extension/IExtension.ts to understand what contains `IExtensionObject`.
|
||||||
|
|
||||||
NOTE: this is not needed to create an extension it only helps your IDE and your development. These type definitions are removed when you compile `ts` to `js`.
|
NOTE: this is not needed to create an extension it only helps your IDE and your development. These type definitions are removed when you compile `ts` to `js`.
|
||||||
|
|
||||||
#### `init` function
|
#### `init` function
|
||||||
|
|
||||||
You need to implement the `init` function for a working extension:
|
You need to implement the `init` function for a working extension:
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
|
export const init = async (extension: IExtensionObject<void>): Promise<void> => {};
|
||||||
export const init = async (extension: IExtensionObject<void>): Promise<void> => {
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### pigallery2 lifecycle `events`
|
#### pigallery2 lifecycle `events`
|
||||||
@ -105,5 +105,4 @@ export const init = async (extension: IExtensionObject<void>): Promise<void> =>
|
|||||||
Tha app exposes multiple interfaces for the extensions to interact with the main app. `events` are one of the main interfaces.
|
Tha app exposes multiple interfaces for the extensions to interact with the main app. `events` are one of the main interfaces.
|
||||||
Here are their flow:
|
Here are their flow:
|
||||||
|
|
||||||
|
|
||||||
![events_lifecycle](events.png)
|
![events_lifecycle](events.png)
|
||||||
|
Loading…
Reference in New Issue
Block a user