Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
A simple CLI for scaffolding Storyblok projects and fieldtypes.
You found an issue?
Tell us about it - open an issue or look if it was already reported.
Make sure you've node >= 9.11.0
installed.
$ npm i storyblok -g
Usage to kickstart a boilerplate, fieldtype or theme
$ storyblok select
Download your space's components schema as json
$ storyblok pull-components --space <SPACE_ID>
space
: your space idPush your components file to your/another space
$ storyblok push-components <SOURCE> --space <SPACE_ID>
source
: can be a URL or path to JSON file.Using an URL
$ storyblok push-components https://raw.githubusercontent.com/storyblok/nuxtdoc/master/seed.components.json --space 67819
Using a path to file
$ storyblok push-components ./components.json --space 67819
space
: your space idSync components, folder, roles or stories between spaces
$ storyblok sync --type <COMMAND> --source <SPACE_ID> --target <SPACE_ID>
type
: describe the command type to execute. Can be: folders
, components
, stories
or roles
. It's possible pass multiple types separated by comma (,
).source
: the source space to use to synctarget
: the target space to use to sync# Sync components from `00001` space to `00002` space
$ storyblok sync --type components --source 00001 --target 00002
# Sync components and stories from `00001` space to `00002` space
$ storyblok sync --type components,stories --source 00001 --target 00002
Create a space in Storyblok and select the boilerplate to use
$ storyblok quickstart
Logout from the Storyblok cli
$ storyblok logout
Login to the Storyblok cli
$ storyblok login
Create a migration file (with the name change_<COMPONENT>_<FIELD>.js
) inside the migrations
folder. Check Migrations section to more details
$ storyblok generate-migration --space <SPACE_ID> --component <COMPONENT_NAME> --field <FIELD>
space
: space where the component iscomponent
: component name. It needs to be a valid componentfield
: name of fieldExecute a specific migration file. Check Migrations section to more details
$ storyblok run-migration --space <SPACE_ID> --component <COMPONENT_NAME> --field <FIELD> --dryrun
Optionally you can provide the publish parameter to publish content after saving. Example:
$ storyblok run-migration --publish published --space 1234 --component article --field image
space
: the space you get from the space settings areacomponent
: component name. It needs to be a valid componentfield
: name of fielddryrun
: when passed as an argument, does not perform the migrationpublish
(optional): publish the content when update
all
: publish all stories, even if they have not yet been publishedpublished
: only publish stories that already are published and don't have unpublished changespublished-with-changes
: publish stories that are published and have unpublished changespublish-languages
(optional): publish specific languages. You can publish more than one language at a time by separating the languages by ,
List all spaces of the logged account
$ storyblok spaces
This command gives the possibility to import files directly to a specific space, thus being able to create stories with ease. The layer supports .csv
, .xml
and .json
files.
$ storyblok import --file <FILE_NAME> --type <TYPE_OF_CONTENT> --folder
<FOLDER_ID> --delimiter <DELIMITER_TO_CSV_FILES> --space <SPACE_ID>
file
: name of the file where the data istype
: this is the name of the content type you want to createfolder
: id of the folder where you want to upload the stories (Default value is 0 )delimiter
: delimiter of the .cvs
files, only necessary if you are uploading a csv file (Default value is ; )space
: space where data will be loadedFor global help
$ storyblok --help
For command help
$ storyblok sync --help
For view the CLI version
$ storyblok -V # or --version
Content migrations are a convenient way to change fields of your content.
To execute a migration you first need to create a migration file. This file is a pure Javascript function where the content of a specific content type or compontent gets passed through.
To create a migration file, you need to execute the generate-migration
command:
# creating a migration file to product component to update the price
$ storyblok generate-migration --space 00000 --component product --field price
When you run this command a file called change_product_price.js
will be created inside a folder called migrations
.
The created file will have the following content:
// here, 'subtitle' is the name of the field defined when you execute the generate command
module.exports = function (block) {
// Example to change a string to boolean
// block.subtitle = !!(block.subtitle)
// Example to transfer content from other field
// block.subtitle = block.other_field
}
In the migration function you can manipulate the block variable to add or modify existing fields of the component.
To run the migration function you need to execute the run-migration
command. Pass the --dryrun option to not execute the updates and only show the changes in the terminal:
$ storyblok run-migration --space 00000 --component product --field price --dryrun
After checking the output of the dryrun you can execute the updates:
# you can use the --dryrun option to not execute the updates
$ storyblok run-migration --space 00000 --component product --field price
You can execute the migration and, when update the content, publish it using the --publish
and --publish-languages
options. When you use the publish
option, you need to specific one of these following options: 'all', 'published' or 'published-with-changes':
$ storyblok run-migration --space 00000 --component product --field price --publish all
You can specify the languages to update using --publish-languages=<LANGUAGE>
or update all languages using --publish-languages=ALL_LANGUAGES
:
# to update only one language
$ storyblok run-migration --space 00000 --component product --field price --publish all --publish-languages=de
# to update more than one language
$ storyblok run-migration --space 00000 --component product --field price --publish all --publish-languages=de,pt
Let's create an example to update all occurrences of the image field in product component. In the example we replace the url from //a.storyblok.com
to //my-custom-domain.com
.
First, you need to create the migration function:
$ storyblok generate-migration --space 00000 --component product --field image
Then let's update the default image field:
module.exports = function (block) {
block.image = block.image.replace('a.storyblok.com', 'my-custom-domain.com')
}
Now you can execute the migration file:
$ storyblok run-migration --space 00000 --component product --field image --dryrun
To transform a markdown or html field into a richtext field you first need to install a converter library.
$ npm install storyblok-markdown-richtext -g
Now check the path to the global node modules folder
$ npm root -g
Generate the migration with storyblok generate-migration --space 00000 --component blog --field intro
and apply the transformation:
var richtextConverter = require('/usr/local/lib/node_modules/storyblok-markdown-richtext')
module.exports = function (block) {
if (typeof block.intro == 'string') {
block.intro = richtextConverter.markdownToRichtext(block.intro)
}
}
This command supports 3 file extensions, xml
, csv
and json
.
To create stories in the storyblok you will need to have two mandatory attributes name
and slug
.
For more information on how to create stories, see the documentation.
For .json
files, the keys must be the story slugs, an one of keys has been name.
{
"this-is-my-title": { // The key of json will be the slug of the story
"title": "This is my title", // "title": is a name for story
"text": "Lorem ipsum dolor sit amet.",
"image": "https://test.com/corporate-website.svg",
"category": "press"
}
}
For .xml
files, these must contain a tag with the slug inside
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<path>this-is-my-title</path> <!-- The <path> tag will be the slug of the story -->
<title>This is my title</title> <!-- The <title> tag will be the name of the story -->
<text>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</text>
<image>https://a.storyblok.com/corporate-website.svg</image>
<category>press</category>
</row>
</root>
For .csv
files, these must have a column named path
.
The default delimiter for .csv
files is ;, but if your file uses another delimiter, pass that delimiter using the --delimiter
flag.
The path;
fields will be the slug of the story and title;
will be the name field.
path;title;text;image;category
this-is-my-title;This is my title;"Lorem ipsum dolor sit amet.;https://a.storyblok.com/corporate-website.svg;press
Check out our guides for client side apps (VueJS, Angular, React, ...), static site (Jekyll, NuxtJs, ...), dynamic site examples (Node, PHP, Python, Laravel, ...) on our Getting Started page.
FAQs
A simple CLI to start Storyblok from your command line.
The npm package storyblok receives a total of 12,504 weekly downloads. As such, storyblok popularity was classified as popular.
We found that storyblok demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.