# 插件目录结构

可以通过 `yarn pm create my-plugin` 快速创建一个空插件,目录结构如下:

```bash
|- /my-plugin
  |- /src
    |- /client      # 插件客户端代码
    |- /server      # 插件服务端代码
  |- client.d.ts
  |- client.js
  |- package.json   # 插件包信息
  |- server.d.ts
  |- server.js
  |- build.config.ts # 或者 `build.config.js` ,用于修改打包配置,实现自定义逻辑
```

`/src/server` 的教程参考 [服务端](./server) 章节,`/src/client` 的教程参考 [客户端](./client) 章节。

如果你想要自定义打包配置,可以在根目录下创建 `config.js` 文件,内容如下:

```js
import { defineConfig } from '@nocobase/build';

export default defineConfig({
  modifyViteConfig: (config) => {
    // vite 是用来打包 `src/client` 端代码的

    // 修改 Vite 配置,具体可参考:https://vitejs.dev/guide/
    return config
  },
  modifyTsupConfig: (config) => {
    // tsup 是用来打包 `src/server` 端代码的

    // 修改 tsup 配置,具体可参考:https://tsup.egoist.dev/#using-custom-configuration
    return config
  },
  beforeBuild: (log) => {
    // 构建开始前的回调函数,可以在构建开始前做一些操作
  },
  afterBuild: (log: PkgLog) => {
    // 构建完成后的回调函数,可以在构建完成后做一些操作
  };
});
```