|
1 |
| -# plugin-sample-vite-svelte |
2 | 1 |
|
3 |
| -SiYuan plugin sample with vite and svelte. |
| 2 | +# SiYuan plugin sample with vite and svelte |
4 | 3 |
|
5 |
| -## Introduction |
| 4 | +1. Using vite for packaging |
| 5 | +2. Use soft linking instead of putting the project into the plugins directory program development |
| 6 | +3. Built-in support for the svelte framework |
| 7 | +4. Provides a github action template to automatically generate package.zip and upload to new release |
6 | 8 |
|
7 |
| -This plugin is a community third-party plug-in development template, in addition to the official development template provides a basic level of functionality, has the following features: |
8 | 9 |
|
9 |
| -1. based on vite package project, support for hot-loading, in dev mode whether the code or i18n changes can be automatically tracked |
10 |
| -2. soft linking instead of putting the project into the plugins directory program development, you can feel free to develop multiple projects in the same workspace at the same time, and do not worry about accidentally deleting the project code in the source |
11 |
| -3. built-in support for the svelte framework, compared to react, vue and other virtual DOM-based solutions, svelte such compiled framework is more suitable for plug-in development of such lightweight scenarios |
12 |
| -4. provides a github action template to automatically generate package.zip and upload to new release |
13 |
| -5. pre-packaged siyuan.d.ts module, no need to manually replace the siyuan module under the node_module |
14 |
| -6. Provide with api.ts and sy-dtype.d.ts |
| 10 | +## Get started |
15 | 11 |
|
| 12 | +1. Make a copy of this repo as a template with the Use this template button, please note that the repo name must be the same as the plugin name, the default branch must be main |
16 | 13 |
|
17 |
| -## Template usage |
18 |
| - |
19 |
| -1. Use Template |
20 |
| - |
21 |
| -2. Clone to local |
| 14 | +2. Clone your repo to a local development folder at any place |
| 15 | + - Notice: we **don't recommand** you to place the folder under your {workspace}/data/plugins/ folder. |
22 | 16 |
|
23 | 17 | 3. Create development soft links
|
24 | 18 |
|
25 |
| - - Create the dev directory |
26 |
| - - Run the ``scripts/make_dev_link.py`` script, passing in the absolute path to the plugins directory, e.g. |
| 19 | + - It is recommended to create a symbolic link between your development directory and the plugins directory. |
| 20 | + - If you have python environment in you device, run the command `python scripts/make_dev_link.py <plugin_dir>` script, `<plugin_dir>` is the absolute path to the plugins directory, e.g. |
27 | 21 |
|
28 | 22 | ```powershell
|
29 |
| - >> sudo python . \scripts\make_dev_link.py H:\temporary folder\SiYuanDevSpace\data\plugins |
30 |
| - Folder already exists, exit |
| 23 | + >>> sudo python . \scripts\make_dev_link.py "H:\SiYuanDevSpace\data\plugins" |
| 24 | + Symlink created: H:\SiYuanDevSpace\data\plugins\plugin-sample |
31 | 25 | ```
|
32 |
| -
|
33 |
| - - You may need sudo to run it, I installed sudo myself on windows via scoop and can run it directly that way, normal windows users can first open the command line as administrator and then run it. |
| 26 | + - You may need to run it as administration, normal windows users can first open the command line as administrator and then run it. Or if you have scoop installed in you windows system, you install `scoop install sudo` and run with sudo. |
34 | 27 | - If you haven't installed python in your environment, you can also manually make a soft link, reference to [mklink](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink)
|
35 | 28 | - Notice: make sure that the name of soft link is same as the name in your plugin.json
|
36 |
| - - As the generated softlink is the same as the plugin name, do not put the project directory under plugins (this is contrary to the official template) |
37 |
| -
|
38 |
| -4. development |
39 |
| -
|
40 |
| - - When pnpm dev mode is enabled, the code and i18n README plugin.json are automatically tracked and the compiled results are placed in the dev directory |
41 |
| - - The new version of SiYuan already allows soft links, so there is no need to put the project under plugin. |
42 |
| -
|
43 |
| -5. manual release (You can use github action instead) |
44 |
| -
|
45 |
| - - pnpm build, automatically generates package.zip |
46 |
| -
|
47 |
| -
|
48 |
| -## Github action |
49 |
| -
|
50 |
| -The github action is included and can be automatically packaged and published: |
51 |
| -
|
52 |
| -1. set the project `https://github.com/OWNER/REPO/settings/actions` page down to **Workflow Permissions** and open the configuration |
| 29 | + - As the generated softlink is the same as the plugin name, **do not put the project directory under plugins** (this is contrary to the webpack version) |
| 30 | +
|
| 31 | +4. Develope |
| 32 | +
|
| 33 | + - Install NodeJS and pnpm, then run pnpm i in the command line under your repo folder |
| 34 | + - Execute pnpm run dev for real-time compilation |
| 35 | + - Open SiYuan marketplace and enable plugin in downloaded tab |
| 36 | +
|
| 37 | +## I18n |
| 38 | +
|
| 39 | +In terms of internationalization, our main consideration is to support multiple languages. Specifically, we need to |
| 40 | +complete the following tasks: |
| 41 | +
|
| 42 | +* Meta information about the plugin itself, such as plugin description and readme |
| 43 | + * `description` and `readme` fields in plugin.json, and the corresponding README*.md file |
| 44 | +* Text used in the plugin, such as button text and tooltips |
| 45 | + * src/i18n/*.json language configuration files |
| 46 | + * Use `this.i18.key` to get the text in the code |
| 47 | +* Finally, declare the language supported by the plugin in the `i18n` field in plugin.json |
| 48 | +
|
| 49 | +It is recommended that the plugin supports at least English and Simplified Chinese, so that more people can use it more |
| 50 | +conveniently. |
| 51 | +
|
| 52 | +## plugin.json |
| 53 | +
|
| 54 | +```json |
| 55 | +{ |
| 56 | + "name": "plugin-sample-vite-svelte", |
| 57 | + "author": "frostime", |
| 58 | + "url": "https://github.com/siyuan-note/plugin-sample-vite-svelte", |
| 59 | + "version": "1.0.0", |
| 60 | + "displayName": { |
| 61 | + "en_US": "Plugin sample with vite and svelte", |
| 62 | + "zh_CN": "插件样例 vite + svelte 版" |
| 63 | + }, |
| 64 | + "description": { |
| 65 | + "en_US": "SiYuan plugin sample with vite and svelte", |
| 66 | + "zh_CN": "使用 vite 和 svelte 开发的思源插件样例" |
| 67 | + }, |
| 68 | + "readme": { |
| 69 | + "en_US": "README_en_US.md", |
| 70 | + "zh_CN": "README.md" |
| 71 | + }, |
| 72 | + "i18n": [ |
| 73 | + "en_US", |
| 74 | + "zh_CN" |
| 75 | + ], |
| 76 | + "funding": { |
| 77 | + "custom": [ |
| 78 | + "https://afdian.net/a/frostime" |
| 79 | + ] |
| 80 | + } |
| 81 | +} |
| 82 | +``` |
| 83 | + |
| 84 | +* `name`: Plugin name, must be the same as the repo name, and must be unique globally (no duplicate plugin names in the |
| 85 | + marketplace) |
| 86 | +* `author`: Plugin author name |
| 87 | +* `url`: Plugin repo URL |
| 88 | +* `version`: Plugin version number, it is recommended to follow the [semver](https://semver.org/) specification |
| 89 | +* `displayName`: Template display name, mainly used for display in the marketplace list, supports multiple languages |
| 90 | + * `default`: Default language, must exist |
| 91 | + * `zh_CN`, `en_US` and other languages: optional, it is recommended to provide at least Chinese and English |
| 92 | +* `description`: Plugin description, mainly used for display in the marketplace list, supports multiple languages |
| 93 | + * `default`: Default language, must exist |
| 94 | + * `zh_CN`, `en_US` and other languages: optional, it is recommended to provide at least Chinese and English |
| 95 | +* `readme`: readme file name, mainly used to display in the marketplace details page, supports multiple languages |
| 96 | + * `default`: Default language, must exist |
| 97 | + * `zh_CN`, `en_US` and other languages: optional, it is recommended to provide at least Chinese and English |
| 98 | +* `i18n`: Plugin supported language list |
| 99 | +* `funding`: Plugin sponsorship information |
| 100 | + * `openCollective`: Open Collective name |
| 101 | + * `patreon`: Patreon name |
| 102 | + * `github`: GitHub login name |
| 103 | + * `custom`: Custom sponsorship link list |
| 104 | + |
| 105 | +## Package |
| 106 | + |
| 107 | +No matter which method is used to compile and package, we finally need to generate a package.zip, which contains at |
| 108 | +least the following files: |
| 109 | + |
| 110 | +* icon.png |
| 111 | +* index.js |
| 112 | +* plugin.json |
| 113 | +* preview.png |
| 114 | +* README*.md |
| 115 | +* index.css (optional) |
| 116 | +* i18n/* (optional) |
| 117 | + |
| 118 | +## List on the marketplace |
| 119 | + |
| 120 | +* `pnpm run build` to generate package.zip |
| 121 | +* Create a new GitHub release using your new version number as the "Tag version". See here for an |
| 122 | + example: https://github.com/siyuan-note/plugin-sample/releases |
| 123 | +* Upload the file package.zip as binary attachments |
| 124 | +* Publish the release |
| 125 | + |
| 126 | +If it is the first release, please create a pull request to |
| 127 | +the [Community Bazaar](https://github.com/siyuan-note/bazaar) repository and modify the plugins.json file in it. This |
| 128 | +file is the index of all community plugin repositories, the format is: |
| 129 | + |
| 130 | +```json |
| 131 | +{ |
| 132 | + "repos": [ |
| 133 | + "username/reponame" |
| 134 | + ] |
| 135 | +} |
| 136 | +``` |
| 137 | + |
| 138 | +After the PR is merged, the bazaar will automatically update the index and deploy through GitHub Actions. When releasing |
| 139 | +a new version of the plugin in the future, you only need to follow the above steps to create a new release, and you |
| 140 | +don't need to PR the community bazaar repo. |
| 141 | + |
| 142 | +Under normal circumstances, the community bazaar repo will automatically update the index and deploy every hour, |
| 143 | +and you can check the deployment status at https://github.com/siyuan-note/bazaar/actions. |
| 144 | + |
| 145 | +## Use Github Action |
| 146 | + |
| 147 | +The github action is included in this sample, you can use it to publish your new realse to marketplace automatically: |
| 148 | + |
| 149 | +1. In your repo setting page `https://github.com/OWNER/REPO/settings/actions`, down to **Workflow Permissions** and open the configuration like this: |
53 | 150 |
|
54 | 151 | 
|
55 | 152 |
|
56 |
| -2. when you need to release a version, push a tag in the format `v*` and github will automatically release (including package.zip) |
| 153 | +2. Push a tag in the format `v*` and github will automatically create a new release with new bulit package.zip |
57 | 154 |
|
58 |
| -3. use conservative pre-release by default, if you don't think this is necessary, change the settings in release.yml to |
| 155 | +3. By default, it will only publish a pre-release, if you don't think this is necessary, change the settings in release.yml |
59 | 156 |
|
60 | 157 | ```yaml
|
61 | 158 | - name: Release
|
|
0 commit comments