docs(sdk): plugin minimal en dossier + hot reload documentés — manifest (arborescence minimale idea-plugin.json/package.json/tsconfig/src/dist, install depuis dossier), packaging-distribution (procédure hot reload directory install + idea_plugin_reload + limites UI React), README (lien packaging hot reload)
This commit is contained in:
@ -2,6 +2,103 @@
|
||||
|
||||
Every plugin package has an `idea-plugin.json` file at the archive root.
|
||||
|
||||
For development installs, the same file must exist at the root of the plugin
|
||||
source directory selected in IdeA with `Paramètres > Plugins > Installer depuis
|
||||
un dossier…`.
|
||||
|
||||
## Minimal Plugin Directory
|
||||
|
||||
A plugin directory must contain the manifest at its root and a built ESM
|
||||
entrypoint matching the manifest `main` field.
|
||||
|
||||
```text
|
||||
my-plugin/
|
||||
├── idea-plugin.json
|
||||
├── package.json
|
||||
├── tsconfig.json
|
||||
├── src/
|
||||
│ └── index.ts
|
||||
└── dist/
|
||||
└── index.js
|
||||
```
|
||||
|
||||
Create the directory:
|
||||
|
||||
```sh
|
||||
mkdir -p my-plugin/src
|
||||
cd my-plugin
|
||||
npm init -y
|
||||
npm install --save-dev typescript @idea/plugin-sdk
|
||||
```
|
||||
|
||||
Use a package script that emits JavaScript into `dist/`:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@idea/plugin-sdk": "^0.3.0",
|
||||
"typescript": "^5.0.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
When developing against a local SDK checkout instead of a published package,
|
||||
replace the SDK dependency with a `file:` reference, for example:
|
||||
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"@idea/plugin-sdk": "file:../IdeaSDK",
|
||||
"typescript": "^5.0.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Minimal `tsconfig.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext",
|
||||
"outDir": "dist",
|
||||
"rootDir": "src",
|
||||
"strict": true
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
||||
```
|
||||
|
||||
Minimal `src/index.ts`:
|
||||
|
||||
```ts
|
||||
import type { IdeAPluginModule } from "@idea/plugin-sdk";
|
||||
|
||||
const plugin: IdeAPluginModule = {
|
||||
activate(ctx) {
|
||||
ctx.logger.info("plugin activated", { pluginId: ctx.pluginId });
|
||||
}
|
||||
};
|
||||
|
||||
export default plugin;
|
||||
```
|
||||
|
||||
Build before installing or reloading:
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
|
||||
Then install the `my-plugin/` directory in IdeA. For hot reload, keep installing
|
||||
from the directory, rebuild after source changes, then run `idea_plugin_reload`
|
||||
for the installed plugin id. Do not install from a ZIP archive for a hot-reload
|
||||
development loop.
|
||||
|
||||
```json
|
||||
{
|
||||
"ideaPluginManifestVersion": 1,
|
||||
|
||||
Reference in New Issue
Block a user