4.0 KiB
Migration guide from beta.15 to beta.16
Upgrading your Strapi application to v3.0.0-beta.16
.
Upgrading your dependencies
Start by upgrading all your strapi package version to 3.0.0-beta.16
.
Your package.json would look like this:
{
//...
"dependencies": {
"strapi": "3.0.0-beta.16",
"strapi-admin": "3.0.0-beta.16",
"strapi-hook-bookshelf": "3.0.0-beta.16",
"strapi-hook-knex": "3.0.0-beta.16",
"strapi-plugin-content-manager": "3.0.0-beta.16",
"strapi-plugin-content-type-builder": "3.0.0-beta.16",
"strapi-plugin-email": "3.0.0-beta.16",
"strapi-plugin-graphql": "3.0.0-beta.16",
"strapi-plugin-settings-manager": "3.0.0-beta.16",
"strapi-plugin-upload": "3.0.0-beta.16",
"strapi-plugin-users-permissions": "3.0.0-beta.16",
"strapi-utils": "3.0.0-beta.16"
}
}
Then run either yarn install
or npm install
.
Building your administration panel
This new release introduces changes to the administration panel that require a rebuild.
Start by deleting your current build:
rm -rf ./build
Build the administration panel:
yarn build
# or
npm run build
Updating your code
Wysiwyg
Wysiwyg was previously an option of the text
type that was stored in the database. When deploying to production for the first time you had to re-select the option in the interface.
To make sure a Wysiwyg field stays the same when deploying, we introduced the richtext
type. This type is equivalent to the previous text
type with wysiwyg
option enabled.
Before:
{
//...
"attributes": {
"name": {
"type": "string"
}
"description": {
"type": "text"
}
}
}
After:
{
//...
"attributes": {
"name": {
"type": "string"
}
"description": {
"type": "richtext"
}
}
}
Custom controllers and services
If you are using core services, you previously needed to call result.toJSON()
or result.toObject()
to get a plain javascript object. This is not the case anymore, you will now receive a simple object directly.
Before:
module.exports = {
async findOne(id) {
const result = await strapi.services.restaurant.findOne(id);
return result.toJSON();
},
};
After:
module.exports = {
findOne(id) {
return strapi.services.restaurant.findOne(id);
},
};
The same modification was made to strapi.query()
. Read more about Queries here.
Keep in mind that if you are running custom ORM queries with Bookshelf or Mongoose you will still have to call toJSON
or toObject
. Check out this section about custom queries.
Bootstrap function
The function exported in config/functions/bootstrap.js
previously received a callback. This is not the case anymore. You can either use an async function, return a promise or simply run a synchronous function.
Before
module.exports = {
defaults: {},
initialize(cb) {
// code
cb();
},
};
After
Async
module.exports = async () => {
await someOperation();
};
Promise
module.exports = () => {
return new Promise(/* ... */);
};
Sync
module.exports = () => {
someSyncCode();
};
No Function
module.exports = () => {};
Custom hooks
If you have custom hooks in your project, the initialize
function will not receive a callback anymore. You can either use an async function, return a promise or simply run a synchronous function.
Before
module.exports = {
defaults: {},
initialize(cb) {
// code
cb();
},
};
After
Async
module.exports = {
defaults: {},
async initialize() {
await someOperation();
},
};
Promise
module.exports = {
defaults: {},
initialize() {
return new Promise(/* ... */);
},
};
Sync
module.exports = {
defaults: {},
initialize() {
someSyncCode();
},
};