diff --git a/README.md b/README.md index d3edd63..9fcfcaa 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,27 @@ - Notice: we **don't recommand** you to place the folder under your `{workspace}/data/plugins/` folder. 3. Install NodeJS and pnpm, then run pnpm i in the command line under your repo folder -4. Create development symbolic links +4. **Auto create development symbolic links** + - Make sure that SiYuan is running + - Run `pnpm run make-link`, the script will detec all the siyuan workspace, please select + ```bash + >>> pnpm run make-link + > plugin-sample-vite-svelte@0.0.3 make-link H:\SrcCode\开源项目\plugin-sample-vite-svelte + > node --no-warnings ./scripts/make_dev_link.js + + "targetDir" is empty, try to get SiYuan directory automatically.... + Got 2 SiYuan workspaces + [0] H:\Media\SiYuan + [1] H:\临时文件夹\SiYuanDevSpace + Please select a workspace[0-1]: 0 + Got target directory: H:\Media\SiYuan/data/plugins + Done! Created symlink H:\Media\SiYuan/data/plugins/plugin-sample-vite-svelte + ``` +4. **Manually create development symbolic links** - Open `./scripts/make_dev_link.js` file, set `targetDir` to your SiYuan plugin directory `/data/plugins` - Run `pnpm run make-link`, succeed if following message is shown: ```bash - ❯❯❯ pnpm run make-link + >>> pnpm run make-link > plugin-sample-vite-svelte@0.0.1 make-link H:\SrcCode\plugin-sample-vite-svelte > node ./scripts/make_dev_link.js diff --git a/README_zh_CN.md b/README_zh_CN.md index dbcf283..5e40813 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -13,7 +13,23 @@ 2. 将你的库克隆到本地开发文件夹中 * 注意: 同 `plugin-sample` 不同, 本样例并不推荐直接把代码下载到 `{workspace}/data/plugins/` 3. 安装 [NodeJS](https://nodejs.org/en/download) 和 [pnpm](https://pnpm.io/installation),然后在开发文件夹下执行 `pnpm i` 安装所需要的依赖 -4. 创建开发需要的符号链接 +4. **自动创建符号链接** + - 打开思源笔记, 确保思源内核正在运行 + - 运行 `pnpm run make-link`, 脚本会自动检测所有思源的工作空间, 请在命令行中手动输入序号以选择工作空间 + ```bash + >>> pnpm run make-link + > plugin-sample-vite-svelte@0.0.3 make-link H:\SrcCode\开源项目\plugin-sample-vite-svelte + > node --no-warnings ./scripts/make_dev_link.js + + "targetDir" is empty, try to get SiYuan directory automatically.... + Got 2 SiYuan workspaces + [0] H:\Media\SiYuan + [1] H:\临时文件夹\SiYuanDevSpace + Please select a workspace[0-1]: 0 + Got target directory: H:\Media\SiYuan/data/plugins + Done! Created symlink H:\Media\SiYuan/data/plugins/plugin-sample-vite-svelte + ``` +4. **手动创建符号链接** - 打开 `./scripts/make_dev_link.js` 文件,更改 `targetDir` 为思源的插件目录 `/data/plugins` - 运行 `pnpm run make-link` 命令, 如果看到类似以下的消息,说明创建成功: ```bash diff --git a/package.json b/package.json index 2f98a3b..b3ff9ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plugin-sample-vite-svelte", - "version": "0.0.2", + "version": "0.0.3", "type": "module", "description": "", "repository": "", @@ -8,7 +8,7 @@ "author": "", "license": "GPL-3.0", "scripts": { - "make-link": "node ./scripts/make_dev_link.js", + "make-link": "node --no-warnings ./scripts/make_dev_link.js", "dev": "vite build --watch", "build": "vite build" }, diff --git a/plugin.json b/plugin.json index 60a4ede..f625d9f 100644 --- a/plugin.json +++ b/plugin.json @@ -2,7 +2,7 @@ "name": "plugin-sample-vite-svelte", "author": "frostime", "url": "https://github.com/siyuan-note/plugin-sample-vite-svelte", - "version": "0.0.2", + "version": "0.0.3", "displayName": { "en_US": "Plugin sample with vite and svelte", "zh_CN": "插件样例 vite + svelte 版" diff --git a/scripts/make_dev_link.js b/scripts/make_dev_link.js index 893d9f9..f00a456 100644 --- a/scripts/make_dev_link.js +++ b/scripts/make_dev_link.js @@ -1,22 +1,85 @@ import fs from 'fs'; +import readline from 'node:readline'; //************************************ Write you dir here ************************************ //Please write the "workspace/data/plugins" directory here //请在这里填写你的 "workspace/data/plugins" 目录 -const targetDir = ''; +let targetDir = ''; //Like this // const targetDir = `H:\\SiYuanDevSpace\\data\\plugins`; //******************************************************************************************** +const log = console.log; +async function getSiYuanDir() { + let url = 'http://127.0.0.1:6806/api/system/getWorkspaces'; + let header = { + // "Authorization": `Token ${token}`, + "Content-Type": "application/json", + } + let conf = {}; + try { + let response = await fetch(url, { + method: 'POST', + headers: header + }); + if (response.ok) { + conf = await response.json(); + } else { + log(`HTTP-Error: ${response.status}`); + return null; + } + } catch (e) { + log("Error:", e); + log("Please make sure SiYuan is running!!!"); + return null; + } + return conf.data; +} +async function chooseTarget(workspaces) { + let count = workspaces.length; + log(`Got ${count} SiYuan ${count > 1 ? 'workspaces' : 'workspace'}`) + for (let i = 0; i < workspaces.length; i++) { + log(`[${i}] ${workspaces[i].path}`); + } + + if (count == 1) { + return `${workspaces[0].path}/data/plugins`; + } else { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + let index = await new Promise((resolve, reject) => { + rl.question(`Please select a workspace[0-${count-1}]: `, (answer) => { + resolve(answer); + }); + }); + rl.close(); + return `${workspaces[index].path}/data/plugins`; + } +} + +if (targetDir === '') { + log('"targetDir" is empty, try to get SiYuan directory automatically....') + let res = await getSiYuanDir(); + + if (res === null) { + log('Failed! You can set the plugin directory in scripts/make_dev_link.js and try again'); + process.exit(1); + } + + targetDir = await chooseTarget(res); + log(`Got target directory: ${targetDir}`); +} //Check if (!fs.existsSync(targetDir)) { - console.log(`Failed! plugin directory not exists: "${targetDir}"`); - console.log(`Please set the plugin directory in scripts/make_dev_link.js`); + log(`Failed! plugin directory not exists: "${targetDir}"`); + log(`Please set the plugin directory in scripts/make_dev_link.js`); process.exit(1); } @@ -31,7 +94,7 @@ if (!fs.existsSync('./plugin.json')) { const plugin = JSON.parse(fs.readFileSync('./plugin.json', 'utf8')); const name = plugin?.name; if (!name || name === '') { - console.log('Failed! Please set plugin name in plugin.json'); + log('Failed! Please set plugin name in plugin.json'); process.exit(1); } @@ -45,11 +108,10 @@ if (!fs.existsSync(devDir)) { const targetPath = `${targetDir}/${name}`; //如果已经存在,就退出 if (fs.existsSync(targetPath)) { - console.log('Failed! Target directory already exists'); - process.exit(1); + log(`Failed! Target directory ${targetPath} already exists`); +} else { + //创建软链接 + fs.symlinkSync(`${process.cwd()}/dev`, targetPath, 'junction'); + log(`Done! Created symlink ${targetPath}`); } -//创建软链接 -fs.symlinkSync(`${process.cwd()}/dev`, targetPath, 'junction'); -console.log(`Done! Created symlink ${targetPath}`); -