{"_id":"yuque-exporter","_rev":"4240426","name":"yuque-exporter","description":"export yuque to local markdown","dist-tags":{"latest":"1.0.2"},"maintainers":[{"name":"atian25","email":"atian25@qq.com"}],"time":{"modified":"2026-03-25T23:16:46.000Z","created":"2022-11-09T15:57:57.084Z","1.0.2":"2022-11-10T10:33:22.672Z","1.0.1":"2022-11-10T10:13:24.854Z","1.0.0":"2022-11-09T15:57:57.084Z"},"users":{},"author":{"name":"TZ","email":"atian25@qq.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/atian25/yuque-exporter.git"},"versions":{"1.0.2":{"name":"yuque-exporter","version":"1.0.2","description":"export yuque to local markdown","author":{"name":"TZ","email":"atian25@qq.com"},"type":"module","bin":{"yuque-exporter":"dist/bin/cli.js"},"dependencies":{"consola":"^2.15.3","fast-glob":"^3.2.12","filenamify":"^5.1.1","p-queue":"^7.3.0","performant-array-to-tree":"^1.11.0","remark":"^14.0.2","undici":"^5.12.0","unist-util-inspect":"^7.0.1","unist-util-select":"^4.0.1","unist-util-visit":"^4.1.1","yaml":"^2.1.3"},"devDependencies":{"@artus/tsconfig":"^1.0.1","@types/mdast":"^3.0.10","@types/mocha":"^10.0.0","@types/node":"^18.11.7","c8":"^7","eslint":"^8","eslint-config-egg":"^12","mocha":"^10","ts-node":"^10.8.0","typescript":"^4.7.4"},"scripts":{"start":"npm run start:dev","start:prod":"node dist/main.js","start:dev":"ts-node-esm -T src/main.ts","build":"tsc","lint":"eslint ./src --ext .ts","lint:fix":"eslint ./src --ext .ts --fix","test":"mocha","cov":"c8 npm test","prepublishOnly":"rm -rf dist && npm run build"},"homepage":"https://github.com/atian25/yuque-exporter","repository":{"type":"git","url":"git+ssh://git@github.com/atian25/yuque-exporter.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fbfd32d91f537b53b2e5774c69cb8e8b2d9792ae","bugs":{"url":"https://github.com/atian25/yuque-exporter/issues"},"_id":"yuque-exporter@1.0.2","_nodeVersion":"16.18.0","_npmVersion":"8.19.2","dist":{"shasum":"8e3c17215f617c3bc1f939f68e98d83adb0f7e98","size":16266,"noattachment":false,"key":"/yuque-exporter/-/yuque-exporter-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/yuque-exporter/download/yuque-exporter-1.0.2.tgz"},"_npmUser":{"name":"atian25","email":"atian25@qq.com"},"directories":{},"maintainers":[{"name":"atian25","email":"atian25@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/yuque-exporter_1.0.2_1668076402477_0.28757733879424086"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-11-10T10:40:04.067Z","publish_time":1668076402672,"_cnpm_publish_time":1668076402672},"1.0.1":{"name":"yuque-exporter","version":"1.0.1","description":"export yuque to local markdown","author":{"name":"TZ","email":"atian25@qq.com"},"type":"module","bin":{"yuque-exporter":"dist/bin/cli.js"},"dependencies":{"consola":"^2.15.3","fast-glob":"^3.2.12","filenamify":"^5.1.1","p-queue":"^7.3.0","performant-array-to-tree":"^1.11.0","remark":"^14.0.2","undici":"^5.12.0","unist-util-inspect":"^7.0.1","unist-util-select":"^4.0.1","unist-util-visit":"^4.1.1","yaml":"^2.1.3"},"devDependencies":{"@artus/tsconfig":"^1.0.1","@types/mdast":"^3.0.10","@types/mocha":"^10.0.0","@types/node":"^18.11.7","c8":"^7","eslint":"^8","eslint-config-egg":"^12","mocha":"^10","ts-node":"^10.8.0","typescript":"^4.7.4"},"scripts":{"start":"npm run start:dev","start:prod":"node dist/main.js","start:dev":"ts-node-esm -T src/main.ts","build":"tsc","lint":"eslint ./src --ext .ts","lint:fix":"eslint ./src --ext .ts --fix","test":"mocha","cov":"c8 npm test","prepublishOnly":"rm -rf dist && npm run build"},"homepage":"https://github.com/atian25/yuque-exporter","repository":{"type":"git","url":"git+ssh://git@github.com/atian25/yuque-exporter.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9a4b7d991eb672ca05bd47d1bfd3ec9890adf8de","bugs":{"url":"https://github.com/atian25/yuque-exporter/issues"},"_id":"yuque-exporter@1.0.1","_nodeVersion":"16.18.0","_npmVersion":"8.19.2","dist":{"shasum":"914ecf63de483453e03b745cc1ac91159b792d85","size":16212,"noattachment":false,"key":"/yuque-exporter/-/yuque-exporter-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/yuque-exporter/download/yuque-exporter-1.0.1.tgz"},"_npmUser":{"name":"atian25","email":"atian25@qq.com"},"directories":{},"maintainers":[{"name":"atian25","email":"atian25@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/yuque-exporter_1.0.1_1668075204677_0.27484559062178704"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-11-10T10:15:57.080Z","publish_time":1668075204854,"_cnpm_publish_time":1668075204854},"1.0.0":{"name":"yuque-exporter","version":"1.0.0","description":"export yuque to local markdown","author":{"name":"TZ","email":"atian25@qq.com"},"type":"module","bin":{"yuque-exporter":"dist/bin/cli.js"},"dependencies":{"consola":"^2.15.3","fast-glob":"^3.2.12","filenamify":"^5.1.1","p-queue":"^7.3.0","performant-array-to-tree":"^1.11.0","remark":"^14.0.2","undici":"^5.12.0","unist-util-inspect":"^7.0.1","unist-util-select":"^4.0.1","unist-util-visit":"^4.1.1","yaml":"^2.1.3"},"devDependencies":{"@artus/tsconfig":"^1.0.1","@types/mdast":"^3.0.10","@types/mocha":"^10.0.0","@types/node":"^18.11.7","c8":"^7","eslint":"^8","eslint-config-egg":"^12","mocha":"^10","ts-node":"^10.8.0","typescript":"^4.7.4"},"scripts":{"start":"npm run start:dev","start:prod":"node dist/main.js","start:dev":"ts-node-esm -T src/main.ts","build":"tsc","lint":"eslint ./src --ext .ts","lint:fix":"eslint ./src --ext .ts --fix","test":"mocha","cov":"c8 npm test"},"homepage":"https://github.com/atian25/yuque-exporter","repository":{"type":"git","url":"git+ssh://git@github.com/atian25/yuque-exporter.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"4432d716b515cd282664f4cd510e73b6e2bc75fe","bugs":{"url":"https://github.com/atian25/yuque-exporter/issues"},"_id":"yuque-exporter@1.0.0","_nodeVersion":"16.18.0","_npmVersion":"8.19.2","dist":{"shasum":"14d934a033b5cc94a623973108f6faeea0b2ee7d","size":2703,"noattachment":false,"key":"/yuque-exporter/-/yuque-exporter-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/yuque-exporter/download/yuque-exporter-1.0.0.tgz"},"_npmUser":{"name":"atian25","email":"atian25@qq.com"},"directories":{},"maintainers":[{"name":"atian25","email":"atian25@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/yuque-exporter_1.0.0_1668009476945_0.5058193307532473"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-11-09T16:21:23.068Z","publish_time":1668009477084,"_cnpm_publish_time":1668009477084}},"readme":"# yuque-exporter\n\n用于批量导出语雀文档。\n\n## 为什么？\n\n语雀的定位改变为`创作工具`，而不在是`内容社区`，相应的新的付费策略，也会造成了免费用户无法继续用语雀作为自己的个人博客。（相关讨论[传送门](https://www.zhihu.com/question/562238887)）\n\n因此我们需要有一个把创作完的文档发布到其他平台的工具，故抽空写了该项目，可以方便的把语雀的内容批量导出为本地 Markdown，从而可以进一步发布到 GitHub 等平台。\n\n> 本项目开发过程中，也收到了语雀同学的不少指导和建议。\n\n\n## 如何使用\n\n需提前申请语雀 TOKEN，请参考[文档](https://www.yuque.com/yuque/developer/api#785a3731)。\n\n```bash\n$ npx yuque-exporter --token=<your token>\n```\n\n更详细的命令行说明参见：[Help](./src/bin/help.md)\n\n\n## 技术内幕\n\n`调用语雀 API -> 存储所有元数据 -> 根据 TOC 构建本地目录 -> 文件内容处理（下载图片、替换链接等）`\n\nhttps://www.yuque.com/yuque/developer/api\n\n```bash\n$ npm i\n\n$ YUQUE_TOKEN=<your token> npm start\n\n$ ls output\n```\n\n\n## TODO List\n\n- 命令行工具\n  - [x] 提供命令行支持\n- 目录结构\n  - [x] ~~文件名用 slug 还是中文名？~~ 因为目录是中文的，先用全中文，回头提供配置\n  - [ ] 文件名存在非法字符的特殊处理\n  - [x] ~~草稿文件写入到 draft 目录~~ 草稿直接在根目录，方便相对链接\n  - [x] 优化 TOC 的处理\n  - [ ] 如何排序？\n- 正文的处理\n  - [x] 支持 frontmatter\n  - [x] 下载图片、画板\n  - [ ] ~~下载附件~~ 需要登录才能下载，暂时无法支持\n  - [x] 替换文档链接为相对链接\n  - [x] 替换多余的 HTML 标签，如 `<br/>`\n- 增强特性\n  - [ ] 支持多账号和团队文档的下载\n  - [ ] 对 obsidian 的更多支持\n- 其他\n  - [ ] API 调用受限时提示用户（目前 5000 次/小时）\n  - [ ] 单元测试\n","_attachments":{},"homepage":"https://github.com/atian25/yuque-exporter","bugs":{"url":"https://github.com/atian25/yuque-exporter/issues"},"license":"MIT"}