This guide will go over how to quickly and easily create a basic Roc extension, be that a package or a plugin.
We will use a Roc template to create our extension but you do not have to do that.
We will start by creating a new project using the init
command in Roc.
Creating a package
$ mkdir my-package && cd my-package
$ roc create init rocjs/roc-template-package
Creating a plugin
$ mkdir my-plugin && cd my-plugin
$ roc create init rocjs/roc-template-plugin
A Roc extension is something that exports an object named roc
from its main file. This object, called the Roc Object, can define a number of things like commands and configuration, all documented here. Roc enforces that the Roc Object contains at least a name
, a version
and one more thing other than description
. The name
and the version
will automatically be fetched from the extensions package.json
if not manually provided.
An example of a simple plugin
package.json
{
"name": "roc-plugin-example",
"version": "1.0.0",
"main": "index.js"
}
index.js
module.exports = {
commands: {
example: 'git log',
},
};
When the plugin is installed we are able to run roc example
to in turn run the git log
command.
Existing extensions
A great place for inspiration on how to structure extensions is to look at the existing one under the rocjs organisation on GitHub.
A Roc extension is like any npm module and nothing special is needed to build or publish them. However when installing from the template a convenient tool will be provided called roc-internal-dev
that can be used to make the process simpler.
roc-internal-dev
uses Roc internally and all the available commands that are available can be listed using npm start
.
A standalone extension is an extension that does not have a package.json
and normally is the first version of an extension that is used directly in a Roc project without the need to publish it. See more here about the standalone
property.
Relevant questions from FAQ