Closed misnet closed 1 month ago
但发布到halo平台的文章内容中的图片地址、封面图地址都还是语雀的图片地址,并没有更改为图床的地址
我尝试复现,可是并没有出现这个问题,我的 elog.config.js 配置信息如下
module.exports = {
write: {
platform: 'flowus',
flowus: {
tablePageId: process.env.FLOWUS_TEMPLATE_TABLE_PAGE_ID,
}
},
deploy: {
platform: 'halo',
halo: {
endpoint: process.env.HALO_ENDPOINT,
token: process.env.HALO_TOKEN,
policyName: process.env.HALO_POLICY_NAME,
rowType: 'markdown',
needUploadImage: false
}
},
image: {
enable: true,
platform: 'cos',
cos: {
secretId: process.env.COS_SECRET_ID,
secretKey: process.env.COS_SECRET_KEY,
bucket: process.env.COS_IMAGE_BUCKET,
region: process.env.COS_IMAGE_REGION,
host: process.env.COS_HOST,
prefixKey: 'halo-images',
secretExt: '', // 可选
}
},
}
我的同步日志
可以看到图片被成功替换,且部署到了 Halo,可以从这篇文档看到 网站中的图片被成功替换了
方便贴一下 脱敏后 的同步时的日志吗?
值得注意的是:目前版本语雀的封面图地址并不会被自动替换,可以通过拓展点的方式来替换。可以参考这个仓库的 format-image.js
文件配置来进行手动替换
rowType:'html'时,日志有显示上传成功,图片替换成功
但到halo平台上,图片在编辑器和预览显示的都是https://cdn.nlark.com/yuque开头的网址。
当我将rowType设为markdown时,我先elog clean,然后halo上的文章和oss的图全部删除,然后再elog sync下。日志和rowType=html时差不多,日志多了以下这个:
front-matter解析失败,将返回预定义属性can` not read a block mapping entry; a multiline key may not be an implicit key at line 2,column 1: 预定义属性:https://elog.1874.cool/notion/raqyleng501h23p1#预定义属性
但不影响deploy到halo上,但在halo编辑器编辑时图片地址是对的是oss的地址,但前台查看文章的地址却还是语雀的地址,我必须在halo后台重新点一下发布,前台预览文章的图片网址才会变成是oss的地址。
关于封面图我用了你说的拓展点方法,相关代码:
const { matterMarkdownAdapter } = require('@elog/cli')
/**
module.exports = { format, };
用了这个代码后,同步就会报错:
好的谢谢,我晚上会复现一下。
找到问题了,图片未被替换确实是个 BUG。
Elog 在整个部署流程中分为 3 个部分。
理想情况下,在流程 2 中,图片的处理只会针对 markdown进行处理,如果在流程 3 中需要格式化为其他格式,例如 html,则只需要将 markdown 转为 Html 即可。
而 Halo 就可能需要根据用户的选择,将其转成 markdown/html,由rowType
配置控制。
正常情况下,设置rowType: html
是没什么问题的,elog 只需要将处理图片后的 markdown 转成 html 就行。但问题就出在了语雀平台上:语雀比较特殊,他的 API 接口也会同时返回一份 HTML 的数据。
而elog 的 markdown 转 Html 程序会去判断如果已经有 html 数据,则直接返回已存在的 html 数据即可。
所以这就导致本来被处理后的 markdown 未被使用,反而使用了语雀直接返回的 html 数据,而这份数据的图片未被处理。
这就导致了上传到 Halo 平台的文档始终是语雀直接返回的那份 html 数据。
解决办法有两个:
rowType: 'html',
改为rowType: 'markdown'
即可,这样就能保证 上传到 halo 的是已经处理过图片的文档。当然你的 Halo 需要安装 markdown 编辑器才能查看和编辑,可以在插件市场找到相关的编辑器插件。 详情原因可以看 Halo 官方对于这个字段的解释。不过 Elog 还是希望文档的维护交由写作平台(语雀)来维护,而不是在 Halo 编辑器中继续修改,这可能导致文档被下一次的 elog 同步所覆盖。
非常感谢您提供的 bug 线索!
关于封面图的拓展点处理报错。代码需要进行一点修改,错误原因是因为部分文档在语雀中是没有封面图的,这就导致 cover 属性并不存在导致程序报错。将其修改为以下代码即可,后续会优化此类型报错
const { markdownAdapter } = require('@elog/cli') // 使用markdownAdapter 即可, Halo 平台文章正文并不需要 front matter 头
/**
自定义文档插件
@param {DocDetail} doc doc的类型定义为 DocDetail
@param {ImageClient} imageClient 图床下载器,可用于图片上传
@return {Promise} 返回处理后的文档对象
*/
const format = async (doc, imageClient) => {
const cover = doc.properties.cover
// 将 cover 字段中的 notion 图片下载到本地
if (imageClient && cover) { // 判断封面图存在再处理图片
// 只有启用图床平台image.enable=true时,imageClient才能用,否则请自行实现图片上传
const url = await imageClient.uploadImageFromUrl(cover, doc)
// cover链接替换为本地图片
doc.properties.cover = url
}
doc.body = markdownAdapter(doc);
return doc;
};
module.exports = {
format,
};
我这边测试了下发现,Halo 可能是有缓存。直接将 elog.config.js
中的rowType: 'html'
, 改为rowType: 'markdown'
, 删除 elog.cache.json
,重新运行 elog 同步命令,线上的 halo 站点依旧是语雀的图床。
解决办法有两个:
elog.cache.json
,重新运行 elog 同步命令即可front-matter解析失败,将返回预定义属性can` not read a block mapping entry; a multiline key may not be an implicit key at line 2,column 1: 预定义属性:https://elog.1874.cool/notion/raqyleng501h23p1#预定义属性
这个错误是由于 语雀文档头部的 front matter 格式错误,如果你想自定义该文档的 Front Matter,则需要在语雀正文头部正确书写 YAML 格式的 Front Matter,这是一个基本的例子,更多关于 Front Matter 的说明
---
title: "Example Title"
date: "2023-10-01"
tags:
- tag1
- tag2
---
依据您的建议,问题解决,多谢!
你当前使用的Elog版本
0.14.2
Elog配置文件
发生了什么?
1、写作平台是语雀 2、图床用的是阿里云,有开启 运行 elog sync -e .elog.env后没报错,图片也能上传到oss上,但发布到halo平台的文章内容中的图片地址、封面图地址都还是语雀的图片地址,并没有更改为图床的地址
Elog错误日志
附加信息
No response