2019-07-18 19:28:52 +02:00

118 lines
2.9 KiB
Markdown

# Hooks
The hooks are modules that add functionality to the core. They are loaded during the server boot. For example, if your project needs to work with a SQL database, you will have to add the hook `strapi-hook-bookshelf` to be able to connect your app with your database.
**File structure**
```js
const fs = require('fs');
const path = require('path');
module.exports = strapi => {
const hook = {
/**
* Default options
*/
defaults: {
// config object
},
/**
* Initialize the hook
*/
initialize: cb => {
// Write your code here.
// this.defaults['your_config'] to access to your configs.
cb();
},
};
return hook;
};
```
- `defaults` (object): Contains the defaults configurations. This object is merged to `strapi.config.hook.settings.**`.
- `initialize` (function): Called during the server boot. The callback `cb` needs to be called. Otherwise, the hook won't be loaded.
The hooks are accessible through the `strapi.hook` variable.
## Structure
### Node modules
Every folder that follows this name pattern `strapi-hook-*` in your `./node_modules` folder will be loaded as a hook.
A hook needs to follow the structure below:
```
/strapi-hook-[...]
└─── lib
- index.js
- LICENSE.md
- package.json
- README.md
```
The `index.js` is the entry point to your hook. It should look like the example above.
### Custom hooks
The framework allows to load hooks from the project directly without having to install them from npm. It's a great way to take advantage of the features of the hooks system for code that doesn't need to be shared between apps. To achieve this, you have to create a `./hooks` folder at the root of your project and put the hooks into it.
```
/project
└─── admin
└─── api
└─── config
└─── hooks
│ └─── strapi-documentation
│ - index.js
│ └─── strapi-server-side-rendering
│ - index.js
└─── plugins
└─── public
- favicon.ico
- package.json
- server.js
```
## Configuration and activation
To activate and configure your hook with custom options, you need to edit your `./config/hook.json` file in your Strapi app.
```javascript
{
...
"hook-name": {
"enabled": true,
...
}
}
```
## Dependencies
It happens that a hook has a dependency to another one. For example, the `strapi-hook-bookshelf` has a dependency to `strapi-hook-knex`. Without it, the `strapi-hook-bookshelf` can't work correctly. It also means that the `strapi-hook-knex` hook has to be loaded before.
To handle this case, you need to update the `package.json` at the root of your hook.
```json
{
"name": "strapi-hook-bookshelf",
"version": "x.x.x",
"description": "Bookshelf hook for the Strapi framework",
"dependencies": {
...
},
"strapi": {
"dependencies": [
"strapi-hook-knex"
]
}
}
```