Skip to content

Commit

Permalink
Merge branch 'main' into npm
Browse files Browse the repository at this point in the history
  • Loading branch information
vannvan committed Nov 28, 2023
2 parents 6295dfd + 9da960f commit 4397fb4
Show file tree
Hide file tree
Showing 10 changed files with 111 additions and 59 deletions.
51 changes: 51 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
## 简介

项目主要采用`pnpm` `monorepo`进行管理,但省略了复杂的企业化规范,了解基本原理即可进行开发,欢迎参与bug修复以及更好的idea实现。

## 开发步骤

### 安装依赖

在项目根目录安装即可

> pnpm i
### yuque-tools-cli

定位:主要用于在命令行进行批量操作,后续还会扩展其它适用于命令行操作的功能

进入yuque-tools-cli目录

> npm run watch 启动
> npm link 链接到全局
此时便可以进行调试开发了。

### yuque-tools-chrome-extention

定位:浏览器插件工具,想象空间很大,目前还未成形(11.22)

进入yuque-tools-chrome-extention目录

> npm run dev 启动
打开浏览器扩展页 `chrome://extensions/`,开启**开发者模式**,将`build`目录直接拖入浏览器(或者点击**加载已解压的扩展程序**后选择该目录)

## 规范

配各种lint和格式化工具太过繁琐,但仍建议您在编辑器层面遵循基本的约束

- 推荐使用prettier进行代码格式化
- 推荐使用es-lint完成基本的语法校验

## PR

开发时请从`dev`分支拉取代码,合并也往`dev`分支合即可。

## 参考文档

- [pnpm中文文档](https://www.pnpm.cn/installation)

## 此文档信息

2023.11.22 by vannvan
15 changes: 10 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 朴实无华的语雀工具集合

## 知识库批量导出CLI工具
## 知识库|团队资源批量导出CLI工具

![](https://badgen.net/npm/dm/yuque-tools)
![](https://badgen.net/npm/v/yuque-tools)
Expand All @@ -12,18 +12,20 @@

[![example.gif](https://www.z4a.net/images/2023/05/01/example.gif)](https://www.z4a.net/image/VmUHiO)

### 支持
### 已支持功能

- 个人知识库
- 空间(团队)知识库
- 协作知识库
- 小记 (由[jialuohu](https://github.com/jialuohu)提供)
- 团队资源批量导出(仅可执行程序版支持)[下载地址](https://github.com/vannvan/rust-explore/releases) |
[查看源码](https://github.com/vannvan/rust-explore/tree/main/yuque-tools)

> 自 2.1.0 版本开始,交互式列表中 👤 前缀表示个人知识库,其它则为 👥
### 使用说明

[使用说明-传送门](https://github.com/vannvan/yuque-tools/blob/main/packages/yuque-tools-cli/README.md#使用方式)
[使用文档-传送门](https://github.com/vannvan/yuque-tools/blob/main/packages/yuque-tools-cli/README.md#使用方式)

## 浏览器插件

Expand All @@ -44,10 +46,13 @@
### 浏览器插件-TODO

- [ ] 网页端批量导出Markdown
- [ ] 一些可以改进的功能
- [ ] 一些可以改进的功能(`Maybe`)

## 关于

以上工具均产生于个人实际需求,旨在更好的利用一个知识管理工具,欢迎提供更好的idea或参与共创,如有帮助到您,欢迎点个鼓励的⭐️
以上工具均产生于个人实际需求,旨在更好的利用一个知识管理工具,欢迎提供更好的idea或参与共创,如有帮助到您,欢迎点个鼓励的⭐️

另:此工具自开发以来未接收任何资金打赏或以此盈利(**将来也不会**),仅作交流和分享,如侵则删。

[反馈意见](https://github.com/vannvan/yuque-tools/issues) | [CLI工具更新记录](https://github.com/vannvan/yuque-tools/blob/main/packages/yuque-tools-cli/CHANGELOG.md) | [浏览器插件更新记录](https://github.com/vannvan/yuque-tools/blob/main/packages/yuque-tools-chrome-extension/CHANGELOG.md)
[参与bug修复或工具扩展](CONTRIBUTING.md)
2 changes: 1 addition & 1 deletion packages/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 工具内容

- [yuque-tools 命令行导出工具](yuque-tools-cli)
- [yuque-tools 命令行工具](yuque-tools-cli)
- [yuque-tools 浏览器插件](yuque-tools-chrome-extension)

Copyright (c) 2023-present, vannvan
2 changes: 1 addition & 1 deletion packages/yuque-tools-cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
- [x] 其他可能出现错误的环节处理
- [x] 语雀换行可选,因为对于`<br/>`标签有些平台认有些平台不认
- [x] 支持空间级别的知识库导出
- [ ] push
- [ ] 支持团队资源导出

## v2.2.1

Expand Down
73 changes: 36 additions & 37 deletions packages/yuque-tools-cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,25 @@ pull -> 登录 -> 交互式选择知识库(命令行参数完整不会进入交

目前登录完成后会设置一天的有效时间,也就是说在24小时之内重复导出只有第一次需要登录。

### 安装 install
### 安装
>
> npm i yuque-tools -g 安装到全局
> npm i yuque-tools 安装到局部
> 安装到全局以下方法使用`ytool xx`,安装到局部以下方法使用`npx ytool xx`
### 导出 pull
### 导出

创建目录`yuque-docs`并进入目录
创建目录`yuque-docs`并进入目录(目录名称随意)

> ytool pull
#### 参数说明
#### 初级用法

如果仅需导出**个人知识库**,可以任何参数都不传,`pull`之后所有所需信息均会进入交互式环节,按照步骤完成操作即可。

#### 中级用法

##### 参数说明

|参数|说明|必填|
|--|--|--|
Expand All @@ -50,23 +56,20 @@ pull -> 登录 -> 交互式选择知识库(命令行参数完整不会进入交
|all | 导出所有知识库,与`tocRange`互斥|是/交互|
|skip/skipDoc | 导出时是否跳过本地同名文件|否/交互|
|lb/linebreak | 导出时是否保留语雀换行标签,即`<br/>`标签|否/交互|
|host |指定`空间`域名,例如: `https://van.yuque.com`,后面不要有斜杠(`/`)||
|output|导出目录,例如: `./mydocs`,默认为`docs`||
|only_note|导出小记||
|note/onlyNote| 导出小记||
|host | `空间`域名,例如: `https://xxx.yuque.com`,后面不要有斜杠(`/`)||
|output| 导出目录,例如: `./mydocs`,默认为`docs`||

注意:

- 命令行认为前两个参数为帐号和密码;
- 当以上**必填**参数全都存在时不会进入交互式环节,反之则会进入交互环节;
- 对于`skip``lb`,为了命令行使用便捷,采用`skip`表示,而为了含义明确,在配置中采用`skipDoc`表示,`lb`同理;
- 为降低命令行使用时的复杂度,`host``output`(特定场景需要)仅支持配置形式使用且不会进入问询环节,具体配置方式见以下[TIPS](#tips)⬇️
- 由于小记与知识库归属不同,当使用`only_note`时,将只会进入导出小记的环节,知识库的配置将会忽略
- 命令行认为前**两个**参数为帐号和密码;
- 对于`skip``lb``note`,为了命令行使用便捷,采用`skip`表示,而为了含义明确,在配置中采用`skipDoc`表示,其它两个参数同理;
- 为降低命令行使用时的复杂度,`host``onlyNote``output`仅支持配置形式使用且不会进入问询环节,具体配置方式见以下[高级用法](#高级用法)⬇️;
- 由于小记与知识库归属不同,当使用`note`(或配置中`onlyNote``true`)时,将只会进入导出小记的环节,知识库的配置将会忽略。

#### 应用示例
##### 应用示例

[我的测试知识库](https://www.yuque.com/vannvan/dd67e4) 为例

采用一行命令直接导出的形式:
[我的测试知识库](https://www.yuque.com/vannvan/dd67e4) 为例,采用一行命令可以直接导出的命令形式有如下用法:

参数生效的前提是`userName``password`同时存在,且在所有参数最前面,其它参数顺序均无具体要求

Expand All @@ -82,45 +85,39 @@ pull -> 登录 -> 交互式选择知识库(命令行参数完整不会进入交
> ytool pull 18989XXX xxxx all skip lb 表示导出**所有**知识库,**跳过**本地同名文件,**保持语雀换行标签**
> ytool pull 18989XXX xxxx only_note 表示**只导出小记**
采用完全交互式的形式:

> ytool pull 即什么都没有传的情况下,以上所有可选的信息都会进入交互式问询环节
### 清除缓存 clear

工具可能存在因`yuque`接口的不稳定性产生的无法规避的错误(概率较低),从而导致导出操作失败/异常,此时可以`clear`之后再重试导出操作。

> ytool clear
> ytool pull 18989XXX xxxx note 表示**只导出小记**
### TIPS
#### 高级用法

导出参数支持配置化形式,适合长期使用,采用`yuque-docs/yuque.config.json`进行配置,具体含义与上述[参数说明]一致
导出参数支持配置化形式,适合长期使用,采用`yuque-docs/yuque.config.json`进行配置,具体含义见上述[参数说明]

> 以下配置模版可通过`ytool init`直接生成(仅支持2.0版本及以上)
```json
{
"userName": "XXX",
"password": "XXX",
"tocRange":["xxx知识库", "yyy知识库/zzz目录"],
"tocRange": ["xxx知识库", "yyy知识库/zzz目录"],
"skipDoc": false,
"linebreak": false,
"host":"",
"output":"./docs",
"only_note": false
"host": "",
"output": "./docs",
"onlyNote": false
}
```

### 清除缓存 clear

工具可能存在因`yuque`接口的不稳定性产生的无法规避的错误(概率较低),从而导致导出操作失败/异常,此时可以`clear`之后再重试导出操作。

> ytool clear
### 更新插件 upgrade

考虑后期此工具(外挂)还会支持更多工具,从2.0版本开始支持便捷的升级操作,采用如下命令即可方便的完成升级
考虑后期此工具(外挂)还会支持更多工具,从2.0版本开始支持便捷的升级操作,采用如下命令即可完成工具升级。

> ytool upgrade
目前具体实践已应用至我个人的 [knowledge-garden](https://github.com/vannvan/knowledge-garden) 中,感兴趣的朋友可以了解其具体实现。

## 最佳实践

此工具开发的初心是将其作为一个将语雀知识库与其它平台数据共享的**介质**,因此也具备很多实践的可能性,
Expand All @@ -131,9 +128,11 @@ pull -> 登录 -> 交互式选择知识库(命令行参数完整不会进入交
3. 你有更灵活的私域/公域的文字记录,通过`yuque-tools`灵活的导出能力,将内容分发至不同的平台;
4. ...

目前具体实践已应用至我个人的 [knowledge-garden](https://github.com/vannvan/knowledge-garden) 中,感兴趣的朋友可以了解其具体实现。

## 推荐

在跨平台文档同步/博客方案方面[elog](https://github.com/LetTTGACO/elog)有着更强大的能力,有需要的朋友可以了解一下这个项目
在跨平台文档同步/博客方案方面[elog](https://github.com/LetTTGACO/elog)有着更强大的能力,有需要的朋友可以了解一下此项目

<img width="1674" alt="image" src="https://github.com/vannvan/yuque-tools/assets/43501134/8876287c-c80d-420d-82af-ade2586970d6">

Expand Down
4 changes: 2 additions & 2 deletions packages/yuque-tools-cli/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "yuque-tools",
"version": "2.2.1",
"version": "2.2.2",
"private": false,
"description": "语雀知识库内容批量导出和二次处理工具",
"description": "语雀知识库内容+资源批量导出和二次处理工具",
"keywords": [
"yuque",
"yuque export",
Expand Down
2 changes: 1 addition & 1 deletion packages/yuque-tools-cli/src/command/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default class Init implements Ytool.Cli.ICommand {
skipDoc: true,
output: './docs',
linebreak: false,
only_note: false,
onlyNote: false,
}

writeFileSync(CONFIG.localConfig, JSON.stringify(configTemplate, null, 2))
Expand Down
8 changes: 3 additions & 5 deletions packages/yuque-tools-cli/src/command/pull.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export default class Init implements Ytool.Cli.ICommand {
public name = 'pull'
public description =
'获取语雀知识库资源\n用法:yuque-tools pull [userName] [password] [skip|lb|only_note] [tocRange]'
'获取语雀知识库资源\n用法: yuque-tools pull [userName] [password] [skip|lb|note] [tocRange]'
ctx: Ytool.Cli.TCLIContext
constructor(ctx: Ytool.Cli.TCLIContext) {
this.ctx = ctx
Expand All @@ -12,16 +12,14 @@ export default class Init implements Ytool.Cli.ICommand {
if (args.length >= 2) {
// 认为前两位是账号信息
const [userName, password, ...rest] = args
const tocRange = rest.length
? rest.filter((item: string) => !/skip|lb|only_note/.test(item))
: []
const tocRange = rest.length ? rest.filter((item: string) => !/skip|lb|note/.test(item)) : []

const targetArgs = {
userName,
password,
skipDoc: rest.includes('skip'),
linebreak: rest.includes('lb'),
only_note: rest.includes('only_note'),
onlyNote: rest.includes('note'),
tocRange: tocRange,
}
cmd.init(targetArgs)
Expand Down
9 changes: 4 additions & 5 deletions packages/yuque-tools-cli/src/core/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class YuqueTools implements Ytool.App.IYuqueTools {
tocRange: [],
skipDoc: undefined,
linebreak: undefined,
only_note: false,
onlyNote: false,
}
this.knowledgeBaseType = 'personally'
this.userSelectedDoc = []
Expand Down Expand Up @@ -96,7 +96,7 @@ class YuqueTools implements Ytool.App.IYuqueTools {
args.tocRange && Log.info(`知识库: ${args.tocRange}`, 2)
args.tocRange && Log.info(`是否跳过本地文件: ${args.skipDoc ? 'true' : 'false'}`, 2)
args.linebreak && Log.info(`是否保持换行: ${args.linebreak ? 'true' : 'false'}`, 2)
args.only_note && Log.info('本次只导出小记~~')
args.onlyNote && Log.info('本次只导出小记~~')
}

// exit docs dir?
Expand All @@ -108,7 +108,6 @@ class YuqueTools implements Ytool.App.IYuqueTools {
if (!docExit) {
await F.mkdir(path.resolve(CONFIG.outputDir))
await F.mkdir(path.resolve(CONFIG.metaDir))
} else {
}
if (this.exitMetaDir()) {
const cookie = getLocalCookies()
Expand Down Expand Up @@ -158,10 +157,10 @@ class YuqueTools implements Ytool.App.IYuqueTools {
* @returns
*/
private async ask() {
const { only_note } = this.knowledgeConfig
const { onlyNote } = this.knowledgeConfig

//只导出小记
if (only_note) {
if (onlyNote) {
await getAllNotes()
return
}
Expand Down
4 changes: 2 additions & 2 deletions packages/yuque-tools-cli/typings.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ declare namespace Ytool {
/**
* 是否只导出小记
*/
only_note: boolean
onlyNote: boolean
}

type TCLIContext = {
Expand Down Expand Up @@ -67,7 +67,7 @@ declare namespace Ytool {
/**
* 用户的知识库配置
*/
type TKnowledgeConfig = Pick<Cli.TCLI_ARGS, 'linebreak' | 'skipDoc' | 'tocRange' | 'only_note'>
type TKnowledgeConfig = Pick<Cli.TCLI_ARGS, 'linebreak' | 'skipDoc' | 'tocRange' | 'onlyNote'>

/**
* 用户本地配置
Expand Down

0 comments on commit 4397fb4

Please sign in to comment.