zoukankan      html  css  js  c++  java
  • 让 Markdown 中的代码可以实时运行

    背景

    让 Markdown 中的代码可以实时运行,为什么会有这样一个需求?

    在我们前端团队中,技术相关的文档都采用 Markdown 编写, 文档中往往会伴随很多示例代码,我们希望大家在阅读文档的时候,可以运行示例代码,看到效果。

    需求

    • 让 Markdown 中的代码可以运行,并预览效果。
    • 代码可以在线编辑。
    • 不影响整个文档流的布局。
    • 支持 React, 支持代码高亮。
    • 可以配置 babel。

    明确需求以后,写了一个 React 组件来满足这些功能, react-code-view , 首先看一下效果:

    preview

    在线预览: https://simonguo.github.io/react-code-view/

    原理

    • 就通过 markdown-loader 与 html-loader 解析 Markdown 文档。
    • 通过正则表达式取出 code,交给 codemirror
    • 把 codemirror 中的代码通过 babel 编译,再通过 ReactDOM.render 渲染到指定的容器中。

    安装

    npm install react-code-view
    

    配置 webpack

    在 webpack 中需要添加对 markdown-loader 的支持。 需要安装:

    npm install html-loader --save-dev
    npm install markdown-loader --save-dev
    npm install react-markdown-reader --save-dev
    

    webpack.config.js 配置

    >=webpack 2.x +

    
    const markdownRenderer = require('react-markdown-reader').renderer;
    
    {
      test: /.md$/,
      use: [{
        loader: 'html-loader'
      }, {
        loader: 'markdown-loader',
        options: {
          pedantic: true,
          renderer: markdownRenderer(/**languages:Array<string>**/)
        }
      }]
    }
    

    languages 默认值:["javascript", "bash", "xml", "css", "markdown", "less"];

    Github: https://github.com/simonguo/react-markdown-reader

    添加 Babel

    示例代码中通常是使用到 ES2015+ , React 等,需要对代码实时做编译,所以在 html 中引入 babel :

    <script type="text/javascript" src="//cdn.staticfile.org/babel-standalone/6.24.0/babel.min.js"></script>
    

    示例

    
    import CodeView from 'react-code-view';
    import '~react-code-view/lib/less/index.less';
    
    import { Button } from 'rsuite';
    
    
    <CodeView dependencies={{ Button }} >
      {require('./example.md')}
    </CodeView>
    
    

    源代码都统一写在 markdown 中,参考: example.md

    这里需要注意的是把需要运行的代码一定要放在 <!--start-code--> 与 <!--end-code--> 之间。

    谁在用?

  • 相关阅读:
    SGU 176.Flow construction (有上下界的最大流)
    POJ 2391.Ombrophobic Bovines (最大流)
    poj 1087.A Plug for UNIX (最大流)
    poj 1273.PIG (最大流)
    POJ 2112.Optimal Milking (最大流)
    SGU 196.Matrix Multiplication
    SGU 195. New Year Bonus Grant
    关于multicycle path
    ppt做gif动图
    codeforces 598A Tricky Sum
  • 原文地址:https://www.cnblogs.com/guoxiaoming/p/9550075.html
Copyright © 2011-2022 走看看