commit
2dc290df03
5 changed files with 110 additions and 16 deletions
20
README.md
20
README.md
|
@ -17,11 +17,27 @@
|
||||||
- Notice: we **don't recommand** you to place the folder under your `{workspace}/data/plugins/` folder.
|
- 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
|
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 `<siyuan workspace>/data/plugins`
|
- Open `./scripts/make_dev_link.js` file, set `targetDir` to your SiYuan plugin directory `<siyuan workspace>/data/plugins`
|
||||||
- Run `pnpm run make-link`, succeed if following message is shown:
|
- Run `pnpm run make-link`, succeed if following message is shown:
|
||||||
```bash
|
```bash
|
||||||
❯❯❯ pnpm run make-link
|
>>> pnpm run make-link
|
||||||
> plugin-sample-vite-svelte@0.0.1 make-link H:\SrcCode\plugin-sample-vite-svelte
|
> plugin-sample-vite-svelte@0.0.1 make-link H:\SrcCode\plugin-sample-vite-svelte
|
||||||
> node ./scripts/make_dev_link.js
|
> node ./scripts/make_dev_link.js
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,23 @@
|
||||||
2. 将你的库克隆到本地开发文件夹中
|
2. 将你的库克隆到本地开发文件夹中
|
||||||
* 注意: 同 `plugin-sample` 不同, 本样例并不推荐直接把代码下载到 `{workspace}/data/plugins/`
|
* 注意: 同 `plugin-sample` 不同, 本样例并不推荐直接把代码下载到 `{workspace}/data/plugins/`
|
||||||
3. 安装 [NodeJS](https://nodejs.org/en/download) 和 [pnpm](https://pnpm.io/installation),然后在开发文件夹下执行 `pnpm i` 安装所需要的依赖
|
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` 为思源的插件目录 `<siyuan workspace>/data/plugins`
|
- 打开 `./scripts/make_dev_link.js` 文件,更改 `targetDir` 为思源的插件目录 `<siyuan workspace>/data/plugins`
|
||||||
- 运行 `pnpm run make-link` 命令, 如果看到类似以下的消息,说明创建成功:
|
- 运行 `pnpm run make-link` 命令, 如果看到类似以下的消息,说明创建成功:
|
||||||
```bash
|
```bash
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "plugin-sample-vite-svelte",
|
"name": "plugin-sample-vite-svelte",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "",
|
"description": "",
|
||||||
"repository": "",
|
"repository": "",
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"make-link": "node ./scripts/make_dev_link.js",
|
"make-link": "node --no-warnings ./scripts/make_dev_link.js",
|
||||||
"dev": "vite build --watch",
|
"dev": "vite build --watch",
|
||||||
"build": "vite build"
|
"build": "vite build"
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "plugin-sample-vite-svelte",
|
"name": "plugin-sample-vite-svelte",
|
||||||
"author": "frostime",
|
"author": "frostime",
|
||||||
"url": "https://github.com/siyuan-note/plugin-sample-vite-svelte",
|
"url": "https://github.com/siyuan-note/plugin-sample-vite-svelte",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"displayName": {
|
"displayName": {
|
||||||
"en_US": "Plugin sample with vite and svelte",
|
"en_US": "Plugin sample with vite and svelte",
|
||||||
"zh_CN": "插件样例 vite + svelte 版"
|
"zh_CN": "插件样例 vite + svelte 版"
|
||||||
|
|
|
@ -1,22 +1,85 @@
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
import readline from 'node:readline';
|
||||||
|
|
||||||
|
|
||||||
//************************************ Write you dir here ************************************
|
//************************************ Write you dir here ************************************
|
||||||
|
|
||||||
//Please write the "workspace/data/plugins" directory here
|
//Please write the "workspace/data/plugins" directory here
|
||||||
//请在这里填写你的 "workspace/data/plugins" 目录
|
//请在这里填写你的 "workspace/data/plugins" 目录
|
||||||
const targetDir = '';
|
let targetDir = '';
|
||||||
//Like this
|
//Like this
|
||||||
// const targetDir = `H:\\SiYuanDevSpace\\data\\plugins`;
|
// 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
|
//Check
|
||||||
if (!fs.existsSync(targetDir)) {
|
if (!fs.existsSync(targetDir)) {
|
||||||
console.log(`Failed! plugin directory not exists: "${targetDir}"`);
|
log(`Failed! plugin directory not exists: "${targetDir}"`);
|
||||||
console.log(`Please set the plugin directory in scripts/make_dev_link.js`);
|
log(`Please set the plugin directory in scripts/make_dev_link.js`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +94,7 @@ if (!fs.existsSync('./plugin.json')) {
|
||||||
const plugin = JSON.parse(fs.readFileSync('./plugin.json', 'utf8'));
|
const plugin = JSON.parse(fs.readFileSync('./plugin.json', 'utf8'));
|
||||||
const name = plugin?.name;
|
const name = plugin?.name;
|
||||||
if (!name || 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);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,11 +108,10 @@ if (!fs.existsSync(devDir)) {
|
||||||
const targetPath = `${targetDir}/${name}`;
|
const targetPath = `${targetDir}/${name}`;
|
||||||
//如果已经存在,就退出
|
//如果已经存在,就退出
|
||||||
if (fs.existsSync(targetPath)) {
|
if (fs.existsSync(targetPath)) {
|
||||||
console.log('Failed! Target directory already exists');
|
log(`Failed! Target directory ${targetPath} already exists`);
|
||||||
process.exit(1);
|
} 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}`);
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue