Skip to content

配置详情

目录结构

以Hexo的根目录为例:

text
.
├── public
├── scaffolds
├── source
├── themes
├── .elog.env						// Elog用于本地调试时的环境变量配置
├── .gitignore					// git忽略文件,请将.elog.env文件加入,防止密码等信息误提交
├── _config.yml
├── elog.cache.json			// Elog的缓存文件,用于缓存上次同步的文件
├── elog.config.js		  // Elog的配置文件
└── package.json

以下配置都是基于elog.config.js来说明

完整示例

javascript
module.exports = {
  write: {
    platform: 'yuque',
    yuque: {
      token: process.env.YUQUE_TOKEN,
      login: process.env.YUQUE_LOGIN,
      repo: process.env.YUQUE_REPO,
      onlyPublic: false,
      onlyPublished: true,
    },
    'yuque-pwd': {
      username: process.env.YUQUE_USERNAME,
      password: process.env.YUQUE_PASSWORD,
      login: process.env.YUQUE_LOGIN,
      repo: process.env.YUQUE_REPO,
      linebreak: false,
      onlyPublic: false,
      onlyPublished: true,
    },
    notion: {
      token: process.env.NOTION_TOKEN,
      databaseId: process.env.NOTION_DATABASE_ID,
      filter: false, // {property: 'status', select: {equals: '已发布'}}
    },
    feishu: {
      type: 'space',
      wikiId: process.env.FEISHU_WIKI_ID,
      folderToken: process.env.FEISHU_FOLDER_TOKEN,
      appId: process.env.FEISHU_APP_ID,
      appSecret: process.env.FEISHU_APP_SECRET,
    },
    flowus: {
      tablePageId: process.env.FLOWUS_TABLE_PAGE_ID,
      filter: false, // {property: 'status',value: '已发布'}
    }
  },
  deploy: {
    platform: 'local',
    local: {
      outputDir: './docs',
      filename: 'title',
      format: 'markdown',
    },
    halo: {
      endpoint: process.env.HALO_ENDPOINT,
      token: process.env.HALO_TOKEN,
      policyName: process.env.HALO_POLICY_NAME,
      rowType: 'html',
      needUploadImage: true,
    },
    confluence: {
      user: process.env.CONFLUENCE_USER,
      password: process.env.WORDPRESS_PASSWORD,
      endpoint: process.env.WORDPRESS_ENDPOINT,
      spaceKey: process.env.CONFLUENCE_SPACE_KEY,
      rootPageId: process.env.CONFLUENCE_ROOT_PAGE_ID, // 可选
    },
    wordpress: {
      username: process.env.WORDPRESS_USERNAME,
      password: process.env.WORDPRESS_PASSWORD,
      endpoint: process.env.WORDPRESS_ENDPOINT,
    }
  },
  image: {
    enable: false,
    platform: 'local',
    local: {
      outputDir: './docs/images',
      prefixKey: '/images',
      pathFollowDoc: false,
    },
    oss: {
      secretId: process.env.OSS_SECRET_ID,
      secretKey: process.env.OSS_SECRET_KEY,
      bucket: process.env.OSS_BUCKET,
      region: process.env.OSS_REGION,
      host: process.env.OSS_HOST,
      prefixKey: '',
    },
    cos: {
      secretId: process.env.COS_SECRET_ID,
      secretKey: process.env.COS_SECRET_KEY,
      bucket: process.env.COS_BUCKET,
      region: process.env.COS_REGION,
      host: process.env.COS_HOST,
      prefixKey: '',
    },
    qiniu: {
      secretId: process.env.QINIU_SECRET_ID,
      secretKey: process.env.QINIU_SECRET_KEY,
      bucket: process.env.QINIU_BUCKET,
      region: process.env.QINIU_REGION,
      host: process.env.QINIU_HOST,
      prefixKey: '',
    },
    upyun: {
      user: process.env.UPYUN_USER,
      password: process.env.UPYUN_PASSWORD,
      bucket: process.env.UPYUN_BUCKET,
      host: process.env.UPYUN_HOST,
      prefixKey: '',
    },
    github: {
      token: process.env.GITHUB_TOKEN,
      user: process.env.ELOG_GITHUB_USER,
      repo: process.env.ELOG_GITHUB_REPO,
      prefixKey: '',
    }
  }
}

字段说明

字段说明
write写作平台详细配置
deploy部署平台详细配置
image图床平台详情配置

写作平台

语雀(Token方式)

语雀关键信息获取及配置流程请移步 关键信息获取 页面。

字段必填说明默认值
token语雀Token-
baseUrl语雀API请求的Base Urlhttps://www.yuque.com/api/v2
login个人路径/空间ID-
repo语雀仓库短名称,也称为语雀知识库路径-
onlyPublic是否只获取公开文章false
onlyPublished是否只获取已发布文章false
limit文档下载并发数3

baseUrl 为语雀 API 请求路径
当知识库类型为个人知识库时,无需配置。
当知识库类型为团队知识库时,baseUrl=https://空间id.yuque.com/api/v2login=空间idrepo=空间中的语雀知识库路径

语雀(账号密码方式)

语雀关键信息获取及配置流程请移步 关键信息获取 页面。

注意:在非国内CI/CD环境中使用此方式,例如Github Workflow,会导致语雀后台登录设备中出现大量美国IP,目前尚不清楚语雀是否会有安全限制措施,请谨慎使用。推荐本地同步时使用。

字段必填说明默认值
username语雀帐号,一般是手机号-
password语雀密码,可在设置进行绑定
host语雀域名/团队域名https://www.yuque.com
login个人路径/空间ID-
repo语雀仓库短名称,也称为语雀知识库路径-
linebreak导出时是否保留语雀换行标签,即<br/>标签false
limit文档下载并发数3

host 为语雀域名
当知识库类型为个人知识库时,无需配置。
当知识库类型为团队知识库时,host=https://空间id.yuque.com

Notion

Notion 模版获取、关键信息获取及配置流程请移步 关键信息获取 页面。

字段必填类型说明默认值
tokenstringNotion Token
databaseIdstringnotion 中的数据库 id-
filterboolean|object过滤条件false
sortsboolean|string|object[]排序条件false
catalogboolean|object目录信息配置false
limitnumber文档下载并发数3

Filter 字段说明

filter字段是为了筛选 Notion 数据库文档,表示哪些文章需要被 Elog 下载。

  1. filter=true ,即筛选数据库的status属性,且属性值为已发布,对应 Notion 的筛选规则为:

    json
    { 
      property: 'status',
      select: {
      	equals: '已发布'
    	}
    }
  2. filter = false时,不进行筛选,默认下载数据库所有文档

  3. 当需要自定义筛选时,需要按照Notion的筛选规则进行。具体请参考 Notion API文档 - Filter database entries

Sorts 字段说明

sorts字段是为了对 Notion 数据库文档进行排序,以便生成一定顺序的目录信息,对文档的同步不影响。

例如,使用 VitePress 部署文档时,需要对文档按照指定顺序和结构生成路由和 sidebar。

详情见 Elog Docs 文档源码

  1. Elog 提供了一些预设参数,如下。例如sorts=sortDesc即按照数据库的 sort 字段进行倒序排列

    typescript
    export const enum NotionSortPreset {
      /** 按自定义日期排序 */
      dateDesc = 'dateDesc', // 倒序
      dateAsc = 'dateAsc', // 升序
      /** 按创建时间排序 */
      createTimeDesc = 'createTimeDesc', // 倒序
      createTimeAsc = 'createTimeAsc', // 升序
      /** 按更新时间排序 */
      updateTimeDesc = 'updateTimeDesc', // 倒序
      updateTimeAsc = 'updateTimeAsc', // 升序
      /** 按数据库的sort字段进行排序 */
      sortDesc = 'sortDesc', // 倒序
      sortAsc = 'sortAsc', // 升序
    }
  2. sorts=true或者不填时,默认按照文档创建时间倒序进行排序。

  3. 当需要自定义排序时,需要按照Notion的筛选规则进行。具体请参考 Notion API文档 - Sort database entries

Catalog 字段说明

catalog字段是为了配置文档的目录信息,如果需要按照指定目录分类下载时,则需要进行配置,对文档的同步不影响。

  1. 默认值为false,即不记录文档的目录信息

  2. catalog=true,则表示按照数据库的catalog字段进行记录

  3. 当需要自定义属性时,则可按照以下格式进行配置

    javascript
    catalog = {
      enable: true,
      property: "自定义属性"
    }
  4. 当需要配置catalog字段时,请保证数据库有相关属性存在(支持单选/多选)

  5. catalog字段为单选时,只能生成一层目录

  6. catalog字段为多选时,可生成多级目录,但是需要保证标签的顺序

对于Notion和FlowUs,想要开启按指定目录分类下载,还需要开启deploy.local.catalog=true

FlowUs(息流)

FlowUs 模版获取、关键信息获取及配置流程请移步 关键信息获取 页面。

字段必填类型说明默认值
tablePageIdstringflowus 中的多维表格ID-
filterboolean|object过滤条件false
sortboolean|string|object[]排序条件false
catalogboolean|object目录信息配置false
limitnumber文档下载并发数3

Filter 字段说明

filter字段是为了筛选 FlowUs 多维表文档,表示哪些文章需要被 Elog 下载。

  1. 默认值为false,即不过滤文档,全部下载

  2. 如果设置为true,会按照以下规则进行过滤

    javascript
    // 表示将按照多维表中的【status】字段进行过滤,保留所有【已发布】的文档
    filter = {
      property: 'status',
      value: '已发布',
    }
  3. 如果想自定义过滤文档,可以指定多维表的属性名称和值进行过滤。目前只支持【**与】**逻辑,不支持【**或】**逻辑

    javascript
    // 表示将按照多维表中的【status】字段进行过滤,保留所有【已发布】的文档
    filter = {
      property: "status"
      value: "已发布"
    }
    // 表示将按照多维表中的【status】和【tag】字段进行过滤,保留所有status=已发布 且 tag=技术方案的文档
    filter = [
    	{
    	  property: "status"
    	  value: "已发布"
    	}, {
    	  property: "tag"
    	  value: "技术方案"
    	}
    ]

sort 字段说明

sorts 字段是为了对 FlowUs 多维表文档进行排序,以便生成一定顺序的目录信息,对文档的同步不影响

例如,使用 VitePress 部署文档时,需要对文档按照指定顺序和结构生成路由和 sidebar。

  1. 默认值为false,不进行排序

  2. sort=true,会按照文档的创建时间倒序排列

  3. Elog 提供了一些预设参数,如下。例如sort=sortDesc即按照多维表中的 sort 字段进行倒序排列

    typescript
    export enum FlowUsSortPresetEnum {
      /** 按自定义日期排序 */
      dateDesc = 'dateDesc', // 倒序
      dateAsc = 'dateAsc', // 正序
      /** 按创建时间排序 */
      createTimeDesc = 'createTimeDesc', // 倒序
      createTimeAsc = 'createTimeAsc', // 正序
      /** 按更新时间排序 */
      updateTimeDesc = 'updateTimeDesc', // 倒序
      updateTimeAsc = 'updateTimeAsc', // 正序
      /** 按sort字段排序 */
      sortDesc = 'sortDesc', // 倒序
      sortAsc = 'sortAsc', // 正序
    }
  4. 如果需要自定义排序时,可以指定多维表的属性名称和值进行自定义排序。暂不支持多个排序条件

    typescript
    // 表示将按照多维表中的【sort】字段进行【倒序】排列
    sort = {
      property: "sort"
      direction: "descending" // descending:倒序, ascending:正序
    }

Catalog 字段说明

catalog字段是为了配置文档的目录信息,如果需要按照指定目录分类下载时,则需要进行配置,对文档的同步不影响

  1. 默认值为false,即不记录文档的目录信息

  2. catalog=true,则表示按照数据库的catalog字段进行记录

  3. 当需要自定义属性时,则可按照以下格式进行配置

    typescript
    catalog = {
      enable: true,
      property: "自定义属性"
    }
  4. 当需要配置catalog字段时,请保证数据库有相关属性存在(支持单选/多选)

  5. catalog字段为单选时,只能生成一层目录

  6. catalog字段为多选时,可生成多级目录,但是需要保证标签的顺序

对于Notion和FlowUs,想要开启按指定目录分类下载,还需要开启deploy.local.catalog=true

飞书

飞书关键信息获取及配置流程请移步 关键信息获取 页面。

字段必填说明默认值
folderToken目标文件夹token-
appId飞书自建应用appId-
appSecret飞书自建应用appSecret-
limit文档下载并发数3

部署平台

本地部署(local)

适用于所有类似 Hexo 的框架:通过向指定目录存放 markdown 文档来进行渲染的博客平台

字段必填类型说明默认值
outputDirstring文档输出目录-
filenamestring生成文档的命名格式,取值 urlname|titletitle
formatstring适配器,取值 markdown|matter-markdown|wiki|htmlmarkdown
catalogboolean是否按照目录生成文档false
formatExtstring自定义文档处理适配器路径-

FormatExt 字段说明

自定义文档处理适配器.js文件路径,当需要对文档进一步处理时,可配置此选项

  1. 目前只支持 Common Js 标准的处理器

  2. 处理器需要暴露一个同步format 的方法,不支持异步方法

  3. 返回类型为字符串

    javascript
    // 如果需要返回带有front-matter的md字符串,则需要安装并引入此库
    const { matterMarkdownAdapter } = require('@elog/plugin-adapter')
    
    /**
     * 自定义文档处理器
     * @param {DocDetail} doc doc的类型定义为 DocDetail
     * @return {string} 返回处理后的文档内容字符串
     */
    const format = (doc) => {
      doc.body = process(body)
    	// 直接返回md内容字符串
    	return doc.body
    	// 返回带有front-matter的md字符串
      // return matterMarkdownAdapter(doc);
    };
    
    module.exports = {
      format,
    };

    DocDetail 类型定义如下:

    typescript
    /** 文章详情 */
    export interface DocDetail extends BaseDoc {
      /** 实际部署时的markdown文档字符串 */
      body: string
      /** 原始markdown文档字符串 */
      body_original: string
      /** 部署到wiki时会存在 */
      body_wiki?: string
      /** html字符串 */
      body_html?: string
      /** 文章属性 */
      properties: DocProperties
      /** 语雀文章目录路径, Notion暂不支持 */
      catalog?: YuqueCatalog[]
    }
    
    export interface BaseDoc {
      /** 文章唯一ID */
      id: string
      /** 文章ID */
      doc_id: string
      /** 更新时间,冗余字段 */
      updated: number
    }
    
    /** 文章属性 */
    export interface DocProperties {
      urlname: string
      title: string
      date: string
      updated: string
      [key: string]: any
    }

Confluence

字段必填说明默认值
baseUrlConfluence API 请求 Base Url-
spaceKey空间Key-
rootPageId根页面ID,Elog会把文档统一存到此目录下-
userConfluence账号-
passwordConfluence密码-
formatExt自定义文档处理适配器路径,需要符合Confluence格式要求-

WordPress

WordPress 模版获取、关键信息获取及配置流程请移步 关键信息获取 页面。

字段必填说明默认值
usernameWordPress 用户名-
passwordWordPress 密码-
endpointWordPress 站点,例如http://your.site.com/wp-json-
keyMap属性映射-
formatExt自定义文档处理适配器路径,需要符合HTML格式要求-

keyMap 字段说明

属性必填映射字段说明字段值类型默认值
tags标签字段映射string | string[]tags
categories分类字段映射string | string[]categories
urlname页面路径字段映射stringurlname
cover特色图片(封面图)字段映射string,图片urlcover
description简介字段映射stringdescription

一般不需要修改,只要保证文章属性front-matter中有以上字段,即可在上传到WordPress时正确携带,只有字段冲突或者想自定义为中文等情况下才需要进行映射。

语雀需要自行在文章头部添加front-matter,并填写以下值,Notion/FlowUs可直接新增/修改为以上字段即可。

图床平台

图床关键信息获取及配置流程请移步 关键信息获取 页面。

本地存储(local)

字段必填说明默认值
outputDir图片输出目录-
prefixKey图片资源统一前缀-

PrefixKey 字段说明

  1. 本地部署平台一般会有资源根目录,会将某个文件夹视为根目录,而prefixKey就是配置资源目录的前缀
  2. 例如 Vitpress,如果outputDir=./docs/asset/images,则prefixKey=/asset/images

腾讯云(cos)/阿里云(oss)/七牛云(qiniu)

字段必填说明默认值
secretId图床密钥ID-
secretKey图床密钥KEY-
bucket桶名称/七牛云空间-
region存储区域,七牛云可不填-
host指定域名,七牛云必填-
prefixKey上传路径,默认上传到根路径-
secretExt图床密钥拓展点-

又拍云(upyun)

字段必填说明默认值
user操作员账号-
password操作员密码-
bucket服务名-
host指定域名,又拍云会默认提供30天的临时测试域名,建议配置自定义域名临时域名:http://xxx.est.upcdn.net
prefixKey上传路径,默认上传到根路径-
secretExt图床密钥拓展点-

Github图床(github)

字段必填说明默认值
tokenGithub Token-
user用户名-
repo仓库名-
branch分支master
host加速域名,取值 cdn.jsdelivr.net-
prefixKey上传路径,默认上传到根路径-
secretExt图床密钥拓展点-

secretExt 字段说明

图床密钥拓展点路径,一般适用于不想直接配置AK到环境变量或者本地,而是通过异步接口获取

  1. 目前只支持 Common Js 标准拓展点

  2. 拓展点需要暴露一个同步/异步getSecret 的方法

    typescript
    const axios = require('axios');
    
    const getOssSts = async () => {
      return await axios.get('https://xxxx/oss/sts?directory=elog')
    }
    
    const getSecret = async () => {
      const res = await getOssSts()
      const { accessKeyId, accessKeySecret, securityToken, dir, region, bucket } = res.data.data
      return {
        secretId: accessKeyId,
        secretKey: accessKeySecret,
        stsToken: securityToken,
        secure: true,
        prefixKey: dir,
        region,
        bucket,
      }
    }
    
    module.exports = {
      getSecret,
    }
  3. getSecret 返回的密钥信息需要符合图床实例SDK的字段要求,具体请参考对应图床 SDK/API

环境变量配置

  1. 当 Elog 配置文件为 Js 类型时,可在配置文件中通过process.env.xxx自定义环境变量。

  2. 当 ELog 配置文件为 Json 类型时,Elog会优先从配置文件中获取,如果获取不到,则会从环境变量中获取。Elog 默认只会读取以下环境变量值:

    KeyValue
    YUQUE_TOKEN语雀Token
    NOTION_TOKENNotion Token
    CONFLUENCE_USERConfluence账号
    CONFLUENCE_PWDConfluence密码
    GITHUB_TOKENGithub Token
    COS_SECRET_ID腾讯云COS的secretId
    COS_SECRET_KEY腾讯云COS的secretKey
    OSS_SECRET_ID阿里云OSS的AccessKey ID
    OSS_SECRET_KEY阿里云OSS的AccessKey Secret
    QINIU_SECRET_ID七牛云的AccessKey
    QINIU_SECRET_KEY七牛云的SecretKey
    UPYUN_SECRET_ID又拍云的操作员账号
    UPYUN_SECRET_KEY又拍云的操作员密码

⚠️ 为了安全,在实际配置中请不要将敏感信息写在配置文件中,Elog提供了更优雅的本地调试方式。

本地调试

为了方便本地调试,Elog 支持从本地文件中获取环境变量。只需要在部署平台根目录新增.elog.env文件,将用到的配置写入,然后在执行同步命令时指定环境变量文件即可。

shell
elog sync -e .elog.env
yaml
# .elog.env

# 语雀(Token方式)
YUQUE_TOKEN=
# 语雀(帐号密码方式)
YUQUE_USERNAME=
YUQUE_PASSWORD=
# 语雀公共参数,使用语雀必填
YUQUE_LOGIN=
YUQUE_REPO=

# Notion
NOTION_TOKEN=
NOTION_DATABASE_ID=

#FlowUs
FLOWUS_TABLE_PAGE_ID=

#飞书云文档
FEISHU_APP_ID=
FEISHU_APP_SECRET=
FEISHU_FOLDER_TOKEN=
FEISHU_WIKI_ID=

# Halo
HALO_ENDPOINT=
HALO_TOKEN=
HALO_POLICY_NAME=

# Confluence
CONFLUENCE_BASE_URL=
CONFLUENCE_USER=
CONFLUENCE_PASSWORD=
CONFLUENCE_SPACE_KEY=
CONFLUENCE_ROOT_PAGE_ID=

# WordPress
WORDPRESS_USERNAME=
WORDPRESS_PASSWORD=
WORDPRESS_ENDPOINT=

# 腾讯云
COS_SECRET_ID=
COS_SECRET_KEY=
COS_BUCKET=
COS_REGION=
COS_HOST=

# 阿里云
OSS_SECRET_ID=
OSS_SECRET_KEY=
OSS_BUCKET=
OSS_REGION=
OSS_HOST=xxx.oss-cn-xxx.aliyuncs.com

# 七牛云
QINIU_SECRET_ID=
QINIU_SECRET_KEY=
QINIU_BUCKET=
QINIU_REGION=
QINIU_HOST=

# 又拍云
UPYUN_USER=
UPYUN_PASSWORD=
UPYUN_BUCKET=
UPYUN_HOST=xxx.xx.upaiyun.com

# Github
# 在 Github 流水线中,Github不允许以GITHUB开头的自定义变量
# GITHUB_TOKEN 为内置变量,无需改名也无需配置,流水线中可直接获取
GITHUB_TOKEN=
ELOG_GITHUB_USER=
ELOG_GITHUB_REPO=

⚠️ 注意:请将.elog.env文件加入 .gitignore,防止误提交到git仓库

线上部署

线上部署时,需要提前将以上用到的信息配置到环境变量上。 以 Github 为例,可以在仓库的设置-Secrets and variables-Actions-Secrets中进行配置,然后在流水线中注入即可。