184 lines
4.7 KiB
Plaintext
184 lines
4.7 KiB
Plaintext
import { Table } from "docs-ui"
|
||
|
||
export const metadata = {
|
||
title: `${pageNumber} Publish a Plugin`,
|
||
}
|
||
|
||
# {metadata.title}
|
||
|
||
In this chapter, you’ll learn how to publish a plugin. After you publish your plugin, it will also be available in [Medusa’s Plugins Library](https://medusajs.com/plugins/).
|
||
|
||
## package.json Checklist
|
||
|
||
Update the following meta information in your plugin’s package.json:
|
||
|
||
- `name`: The name of your plugin. By convention, all plugin names start with `medusa` followed by a descriptive name of what the plugin does. For example, `medusa-payment-stripe`.
|
||
- `description`: A short description of what the plugin does.
|
||
- `author`: Your name or your company's name.
|
||
- `repository`: Details about the repository that holds the source code of the plugin. It's an object that holds the following properties:
|
||
- `type`: Should be `git`.
|
||
- `url`: The URL to the repository (for example, the GitHub repository holding the code of your plugin).
|
||
|
||
### Package Keywords
|
||
|
||
It's required for all Medusa plugins to use the keywords `medusa-plugin`.
|
||
|
||
The following table mentions other keywords that you can use based on your plugin's functionalities.
|
||
|
||
<Table>
|
||
<Table.Header>
|
||
<Table.Row>
|
||
<Table.HeaderCell>Keyword</Table.HeaderCell>
|
||
<Table.HeaderCell>Description</Table.HeaderCell>
|
||
</Table.Row>
|
||
</Table.Header>
|
||
<Table.Body>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-analytics`</Table.Cell>
|
||
<Table.Cell>Analytics functionalities or integrations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-cms`</Table.Cell>
|
||
<Table.Cell>CMS functionalities or integrations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-notification`</Table.Cell>
|
||
<Table.Cell>Notification functionalities or integrations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-payment`</Table.Cell>
|
||
<Table.Cell>Payment functionalities or integrations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-search`</Table.Cell>
|
||
<Table.Cell>Search functionalities or integrations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-shipping`</Table.Cell>
|
||
<Table.Cell>Shipping functionalities or integrations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-storage`</Table.Cell>
|
||
<Table.Cell>File service or storage integrations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-source`</Table.Cell>
|
||
<Table.Cell>Migrate or import data into Medusa from another platform.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-admin`</Table.Cell>
|
||
<Table.Cell>Plugins that include only admin customizations.</Table.Cell>
|
||
</Table.Row>
|
||
<Table.Row>
|
||
<Table.Cell>`medusa-plugin-other`</Table.Cell>
|
||
<Table.Cell>Any other type of plugin.</Table.Cell>
|
||
</Table.Row>
|
||
</Table.Body>
|
||
</Table>
|
||
|
||
---
|
||
|
||
## Add NPMIgnore File
|
||
|
||
Not all files in your Medusa application are relevant to the published plugin.
|
||
|
||
Add the following `.npmignore` file in the root of the plugin's directory to ignore unnecessary files from the published plugin:
|
||
|
||
```bash title=".npmignore"
|
||
# directories
|
||
.cache
|
||
.DS_store
|
||
.github
|
||
.vscode
|
||
.yarn
|
||
build
|
||
data
|
||
node_modules
|
||
src
|
||
uploads
|
||
|
||
# files
|
||
.babelrc
|
||
.env*
|
||
.gitignore
|
||
.eslintrc
|
||
.prettierrc
|
||
.yarnrc.yml
|
||
index.js
|
||
medusa-config.js
|
||
yarn.lock
|
||
```
|
||
|
||
---
|
||
|
||
## Publish Plugin
|
||
|
||
<Note type="check">
|
||
|
||
To publish a plugin, you need an [NPM account](https://www.npmjs.com/signup).
|
||
|
||
</Note>
|
||
|
||
To publish the plugin:
|
||
|
||
1. Run the `prepare` command:
|
||
|
||
```bash npm2yarn
|
||
npm run prepare
|
||
```
|
||
|
||
2. Publish the NPM package:
|
||
|
||
```bash
|
||
npm publish
|
||
```
|
||
|
||
If you haven’t logged in before with NPM, you’ll be asked to log in first.
|
||
|
||
Your package is then published to NPM.
|
||
|
||
---
|
||
|
||
## Install Plugin in Medusa Applications
|
||
|
||
To install your published plugin in a Medusa application, run the following command:
|
||
|
||
```bash npm2yarn
|
||
npm install medusa-plugin-custom
|
||
```
|
||
|
||
Where `medusa-plugin-custom` is your plugin’s name.
|
||
|
||
Then, add the plugin to `medusa-config.js`:
|
||
|
||
```js title="medusa-config.js"
|
||
const plugins = [
|
||
// ...
|
||
{
|
||
resolve: `medusa-plugin-custom`,
|
||
options: {
|
||
// plugin options...
|
||
},
|
||
},
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
## Update Plugin
|
||
|
||
To publish plugin changes, first, run the following command in the plugin’s directory to change the NPM version:
|
||
|
||
```bash
|
||
npm version <type>
|
||
```
|
||
|
||
Where `<type>` indicates the type of version update you’re publishing. For example, `major`. You can see the [full list of types in NPM’s documentation](https://docs.npmjs.com/cli/v8/commands/npm-version).
|
||
|
||
Then, publish the new update:
|
||
|
||
```bash
|
||
npm publish
|
||
```
|
||
|
||
You can then update the plugin in the Medusa applications that use it. |