2.9 KiB
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
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 tostrapi.config.hook.settings.**
.initialize
(function): Called during the server boot. The callbackcb
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.
{
...
"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.
{
"name": "strapi-hook-bookshelf",
"version": "x.x.x",
"description": "Bookshelf hook for the Strapi framework",
"dependencies": {
...
},
"strapi": {
"dependencies": [
"strapi-hook-knex"
]
}
}