2.0.4 • Published 1 month ago

react-terminal-viewer-cicd v2.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
1 month ago

Preview png

功能

  • 【日志搜索】支持日志搜索,并在输入框实时显示搜索结果;
  • 【日志搜索】支持回车/快捷按钮滚动定位到某一行日志;
  • 【日志搜索】支持变更搜索命中高亮样式;
  • 【日志交互】支持日志置顶,置底;
  • 【日志交互】支持运行中日志自动滚动到底部;
  • 【日志交互】支持选中高亮行,并支持变更高亮样式;
  • 【日志渲染】支持全屏显示;
  • 【日志渲染】支持多种日志组件渲染模式,如自定义关键词高亮渲染,ANSI_escape_code 渲染;
  • 【日志渲染】支持 http 轮询获取日志,支持接口调用重试;
  • 【日志渲染】支持 10W 行以内日志渲染不卡顿;
  • 【日志组件】支持头部组件,实现日志分类的功能;
  • 【日志组件】支持变更组件,如替换置顶,置底图标组件,加载日志组件等;
  • 【日志组件】支持选项可配置式,如请求间隔,高亮模式等;
  • 【日志缓存】使用 localforage 缓存已下载的日志,以解决无法查看全量日志的问题;
  • 【日志缓存】支持缓存过期策略的特性,以解决本地缓存可能溢出的问题;
  • 【日志缓存】支持清除缓存,从头开始加载远程日志;
  • 【日志缓存】支持重建缓存时分批写入解决一次行写入过多日志导致崩溃的问题;
  • 【大数据日志】 支持基于 Web Worker 与虚拟 DOM 模式以支持更大的日志数据渲染

安装

使用 npm 或 yarn 把这个 package 安装到你的项目依赖中:

npm install react-terminal-viewer

yarn add react-terminal-viewer

使用

import React, { useRef } from 'react';
import TerminalViewer from 'react-terminal-viewer';
export default () => {
  const ref = useRef();
  const data = 'echo success';
  return (
    <div style={{ width: '100%', height: '300px' }}>
      <TerminalViewer ref={ref} defaultData={data} />
    </div>
  );
};

开发

$ yarn

启动开发服务

$ yarn start

构建文档

$ yarn docs:build

执行测试

$ yarn test

构建可发布的包

$ yarn build

开启基于 Web Worker 与 虚拟 DOM 的日志组件配置

webpack 配置:

  new CopyPlugin({
      patterns: [
        {
          from: path.resolve(__dirname, 'node_modules/react-terminal-viewer/dist/worker'),
          to: path.resolve(__dirname, 'dist/scripts/worker'),
          filter: (file) => file.includes('worker'),
        },
      ],
    }),

组件使用:

  <TerminalViewer virtualDomSupport workerPath="/scripts/worker"/>

发布

打标签后使用流水线发布或使用常规方式手动发布:

npm version patch && npm publish

更新在线地址

合并代码后与打标签后使用流水线发布,使用常规方式合并代码与构建后,手动推送至deploy

修复已知问题

  • 使用 DOM 模式渲染修复搜索命中关键字时无法修改字体前景的问题
  • 使用 1000+ 的提示修复 搜索结果超过 1000+ 时搜索卡顿的问题

TODO

  • 【日志交互】支持 hover 复制行锚点(由于无法直接获取可视区域行在全文中的唯一位置,导致锚点难以取到)
  • 【日志交互】支持锚点定位行日志(由于无法直接获取可视区域行在全文中的唯一位置,导致锚点难以取到)
  • 【日志交互】支持 hover 复制行日志
  • 【日志渲染】支持高亮超链接;
  • 【Shell 连接】通过 websocket 连接到运行进程的服务器

API

属性名描述类型默认值
fit是否自动拉伸填充容器宽高booleantrue
autoScroll是否开启自动滚动到底部booleantrue
scrollToRow自动滚动到某一行,开启后自动滚动到底部失效number--
logAfter 设置日志后置标签,仅在开启虚拟 DOM 生效FunctionComponent 或 ComponentClass<LogAfterProps, any>--
refreshable是否支持刷新booleantrue
searchPlaceholder搜索框 placeholderstring--
header自定义日志头部, null 为不显示默认头部ReactNode--
inputAddonBefore搜索框前的内容ReactNode--
inputAddonAfter搜索框后的内容ReactNode--
empty自定义空文本显示ReactNode--
icons自定义图标{ search?: ReactNode; up?: ReactNode; down?: ReactNode; clear?: ReactNode; top?: ReactNode; bottom?: ReactNode; fullScreen?: ReactNode; fullScreenExit?: ReactNode; refresh?: ReactNode; loading?: ReactNode; }--
toolbar自定义工具栏ReactNode--
showFullScreen是否显示全屏图标booleantrue
className外层样式类名string--
style可用于设置外层容器样式object--
defaultFullScreen默认全屏显示booleanfalse
defaultData用于渲染日志的默认数据,如 "echo 1\r\necho2"string''
defaultTabIndex默认打开的标签number0
activeTabIndex激活的标签, 如果同时设置了 defaultTabIndex 则以此属性为准number0
tabs多标签配置选项{ key: string|number; title?: ReactNode; defaultData?: string; remoteOptions?: IRemoteOptions; cacheOptions?: ICacheOptions; }[]--
webLinksSupport是否支持渲染超链接booleantrue
canvasSupport是否使用 canvas 渲染, 开启 canvas 会有更好的性能但可能会遇到更多的问题booleanfalse
virtualDomSupport是否使用自研虚拟 DOM 内核,开启后 terminalOptions, canvasSupport, webLinksSupport 不可用booleanfalse
workerPath日志 web worker 路径, 需配合 CopyPlugin 使用且仅在开启 virtualDomSupport 为 true 时有效string/worker
remoteOptions远程加载配置IRemoteOptions--
cacheOptions缓存全局配置,仅在配置远程加载后有效,如 expires: 60 * 1000 表示自动清理已过期一分钟的缓存ICacheOptions--
searchOptionsxterm 搜索选项ISearchOptions--
highlightOptions高亮选项IHighlightOptions[]--
terminalOptionsxtem.js 配置, https://github.com/xtermjs/xterm.jsITerminalOptions--
extraOptions额外的功能选项 { showLineNumber 仅 虚拟 DOM 模式支持}ExtraOptions--
getContainer指定 TerminalViewer 挂载的节点,并在容器内展现,开启全屏后无效, false 为挂载在当前位置stringHTMLElement(() => HTMLElement)当前节点
onLoading加载状态变更回调函数(bool: boolean) => void--
onTitleChange点击 tab 标题后回调函数(index: number) => void--
onRefresh刷新后的回调函数()=>void--