Using ProjectTemplates
The Jumpstart plugin relies on ProjectTemplate
- a file which defines a structured template of items and plugins to be downloaded, actions to be executed after download, and other project configuration.
By default, the plugin leverages the projectTemplates.json file. You can create your own project template to define your custom templates for your developers.
To use a custom project with the Jumpstart plugin, append --project-templates <source>
to the command.
Creating a custom ProjectTemplate
Templates simplify preparation of a project.
In projectTemplates
, a project points to resources such as Apache Tomcat, Magnolia bundles, or various frontend projects.
Structure and types
The templates file structure provides an organized way to represent project templates. Below is a breakdown of its structure and the types used:
Template interfaces
interface TemplateBase {
name: string; (1)
auth?: boolean;
}
interface TemplateWithChildren extends TemplateBase {
children: Array<Template>(4)
bundles?: never;
plugins?: never;
}
interface TemplateWithBundles extends TemplateBase {
bundles: Array<Bundle>(2)
children?: never;
plugins?: never;
}
interface TemplateWithPlugins extends TemplateBase {
plugins: Array<PluginRequirement>(3)
bundles?: never;
children?: never;
}
interface TemplateWithBundlesAndPlugins extends TemplateBase {
bundles: Array<Bundle>(2)
plugins: Array<PluginRequirement>(3)
children?: never;
configVars?: {[key: string]: any}; (5)
}
type TemplateWithoutChildren =
| TemplateWithBundles
| TemplateWithPlugins
| TemplateWithBundlesAndPlugins;
type Template = TemplateWithChildren | TemplateWithoutChildren;
1 | A unique name for the project template. |
2 | An array of bundles or resources that the template references and downloads. |
3 | An array of plugins for CLI that will be installed with the template. |
4 | An array of project templates that provides a hierarchical structure of the project templates. |
5 | A configuration object that will be automatically extracted and added to the mgnl.config.js file as global arguments.
It should contain key-value pairs. |
Bundle interface
interface Bundle {
url: string; (1)
auth?: boolean; (2)
dest?: string; (3)
postCommand?: string[]; (4)
version?: string; (5)
noVersion?: boolean; (6)
alternative?: {
groupId: string,
artifactId: string
}
}
1 | A URL where the bundle or resource can be downloaded from. |
2 | (optional): Set to true if the URL endpoint requires an authentication. |
3 | (optional): Specifies where the resource should be downloaded and/or extracted to. |
4 | (optional): An array of commands to be executed after downloading the bundle.
Commands available:
|
5 | (optional): Set to a specific Magnolia version.
By default, the latest version is always downloaded. |
6 | (optional): If set to true , the latest version is fetched, providing that the git tags are available. |
PluginRequirement interface
interface PluginRequirement {
plugin: string, (1)
pluginArgs: object (2)
}
1 | A reference required to install a particular package.
It can be either the URL of a git repository or the name of a plugin available in the npm repository.
String pattern: npm install <plugin> . |
||
2 | This refers to a configuration object that will be automatically extracted and passed as an argument during the instantiation of the plugin.
It should contain key-value pairs.
|
Example templates
Example A
A projectTemplates.json
that provides a template to download:
-
the latest Tomcat,
-
Magnolia DX Core,
-
the Next.js frontend,
and add various plugins to the available plugins:
Click to see the JSON
{
"projectTemplates": [
{
"name": "headless",
"children": [
{
"name": "minimal-headless-spa-demos",
"children": [
{
"name": "dx-core",
"bundles": [
{
"url": "https://bitbucket.org/magnolia-cms/minimal-headless-spa-demos/get/HEAD.zip",
"postCommand": [
"extract and unfold"
]
},
{
"url": "https://nexus.magnolia-cms.com/service/rest/v1/search/assets?sort=version&repository=public&maven.groupId=info.magnolia.tomcat.barebone&maven.artifactId=magnolia-tomcat-barebone&maven.extension=zip",
"dest": "./magnolia",
"postCommand": [ "extract" ]
},
{
"url": "https://nexus.magnolia-cms.com/service/rest/v1/search/assets?sort=version&repository=enterprise&maven.groupId=info.magnolia.dx&maven.artifactId=magnolia-dx-core-webapp&maven.extension=war",
"auth": true,
"version": "latest",
"dest": "./magnolia/apache-tomcat/webapps/magnoliaAuthor",
"postCommand": [
"extract and override"
]
}
],
"plugins": [
{
"plugin": "@magnolia/cli-start-plugin",
"pluginArgs": {
"tomcatPath": "./magnolia/apache-tomcat"
}
},
{
"plugin": "@magnolia/cli-create-component-plugin",
"pluginArgs": {
"componentsSpaPath": "./spa/nextjs-ssr-minimal/templates/components",
"framework": "@magnolia/cli-react-prototypes",
"prototype": "_default"
}
},
{
"plugin": "@magnolia/cli-create-page-plugin",
"pluginArgs": {
"pagesSpaPath": "./spa/nextjs-ssr-minimal/templates/pages",
"framework": "@magnolia/cli-react-prototypes",
"prototype": "_default"
}
}
],
"configVars": {
"type": "js",
"lightModulesPath": "./magnolia/light-modules",
"lightModule": "nextjs-ssr-minimal-lm",
"componentMappingFilePath": "./spa/nextjs-ssr-minimal/pages/[[...pathname]].js"
}
}
]
}
]
}
]
}
Example B
A projectTemplates.json
that provides a template to:
-
download and install the latest version or version 6.2.11 of the Magnolia Empty Webapp,
-
add the
StartPlugin
to the available plugins.
Click to see the JSON
{
"projectTemplates": [
{
"name": "standard-webapps",
"children": [
{
"name": "magnolia-empty-webapp",
"children": [
{
"name": "latest",
"bundles": [
{
"url": "https://nexus.magnolia-cms.com/service/rest/v1/search/assets?sort=version&repository=public&maven.groupId=info.magnolia.tomcat.barebone&maven.artifactId=magnolia-tomcat-barebone&maven.extension=zip",
"postCommand": [
"extract"
]
},
{
"url": "https://nexus.magnolia-cms.com/service/rest/v1/search/assets?sort=version&repository=public&maven.groupId=info.magnolia&maven.artifactId=magnolia-empty-webapp&maven.extension=war",
"version": "latest",
"dest": "./apache-tomcat/webapps/magnoliaAuthor",
"postCommand": [
"extract and override"
]
}
],
"plugins": [
{
"plugin": "@magnolia/cli-start-plugin",
"pluginArgs": {
"tomcatPath": "./magnolia/apache-tomcat"
}
}
]
},
{
"name": "6.2.11",
"bundles": [
{
"url": "https://nexus.magnolia-cms.com/service/rest/v1/search/assets?sort=version&repository=public&maven.groupId=info.magnolia.tomcat.barebone&maven.artifactId=magnolia-tomcat-barebone&maven.extension=zip",
"postCommand": [
"extract"
]
},
{
"url": "https://nexus.magnolia-cms.com/service/rest/v1/search/assets?sort=version&repository=public&maven.groupId=info.magnolia&maven.artifactId=magnolia-empty-webapp&maven.extension=war",
"version": "6.2.11",
"dest": "./apache-tomcat/webapps/magnoliaAuthor",
"postCommand": [
"extract and override"
]
}
],
"plugins": [
{
"plugin": "@magnolia/cli-start-plugin",
"pluginArgs": {
"tomcatPath": "./magnolia/apache-tomcat"
}
}
]
}
]
}
]
}
]
}
For a more complex example, see the default projectTemplates.json file. |