基于 Vue2.X/Vue3.X 项目引入 vue-code-diff/v-code-diff 代码差异插件并使用

简介: 本文介绍了如何在Vue2.X和Vue3.X项目中引入并使用`vue-code-diff`和`v-code-diff`代码差异插件来展示和比较代码变化。

基于 Vue2.X/Vue3.X 项目引入 vue-code-diff/v-code-diff 代码差异插件并使用

1、Vue2.X的项目

npm i vue-code-diff@1.2.0

父页面:index.vue

<template>
  <div style="padding: 100px;">
    <CodeDiff />
  </div>
</template>

<script>
import CodeDiff from './components/codeDiff'

export default {
   
   
  components: {
   
   
    CodeDiff
  },
  data: () => ({
   
   

  }),
}
</script>

子组件:codeDiff.vue

<template>
  <div class="vue-code-diff">
    <code-diff
      :old-string="oldValue"
      :new-string="newValue"
      :context="10"
      outputFormat="side-by-side"
    />
  </div>
</template>

<script>
  import CodeDiff from 'vue-code-diff'

  export default {
   
   
    components: {
   
   
      CodeDiff
    },
    data: () => ({
   
   
      // 旧值
      // oldValue: 'Starting  ~',

      oldValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 520.' +
                '吾,当成赤龍之霸王!沉入红莲炼狱,将真红之光辉指引天道!',

      // 新值
      newValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 1314.' +
                'Finished Spring Data repository scanning in 36 ms. Found 0 LDAP repository interfaces.' +
                'Started TornaApplication in 4.848 seconds (JVM running for 5.829) ~'

      // newValue: 'Starting  ~'
    }),
    watch: {
   
   

    },
    created() {
   
   

    },
    methods: {
   
   
      /**
       * 设置新旧资源值方法句柄
       */
      handleSetResourceValues(oldValue, newValue) {
   
   
        this.oldValue = oldValue;
        this.newValue = newValue;
        console.log("setResourceValues =>", this.oldValue, this.newValue);
      }
    }
  };
</script>

<style lang="less" scoped>
  .vue-code-diff {
   
   
    margin: 0;
    padding: 0;

    /deep/ .d2h-wrapper {
   
   

      .d2h-file-wrapper {
   
   
        border: unset;
        border-radius: unset;
        margin-bottom: unset;

        .d2h-files-diff {
   
   
          display: flex;

          .d2h-file-side-diff {
   
   
            position: relative;
            overflow: hidden;
            background-color: #fee8e9;

            .d2h-code-wrapper {
   
   

              .d2h-diff-table {
   
   

                .d2h-diff-tbody {
   
   

                  tr {
   
   

                    // 设置表头的第2个单元格大小高度
                    td:nth-child(2).d2h-info {
   
   
                      width: 100%;
                      height: 15px;

                      .d2h-code-side-line {
   
   
                        height: 100%;
                      }
                    }

                    // 当单行溢出换行时,需要把行号的高度撑满
                    td.d2h-code-side-linenumber {
   
   
                      height: 100%;
                    }

                    // 删除代码的变更
                    td.d2h-del {
   
   

                      .d2h-code-side-line {
   
   

                        .d2h-code-line-ctn {
   
   

                          .hljs {
   
   
                            font-family: "Microsoft YaHei","微软雅黑";
                            height: auto;
                            font-size: 14px;
                            white-space: pre-line; // 代码换行
                          }
                        }
                      }
                    }

                    // 新增代码的变更
                    td.d2h-ins {
   
   

                      .d2h-code-side-line {
   
   

                        .d2h-code-line-ctn {
   
   

                          .hljs {
   
   
                            font-family: "Microsoft YaHei","微软雅黑";
                            height: auto;
                            font-size: 14px;
                            white-space: pre-line; // 单行溢出换行
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          .d2h-file-side-diff + .d2h-file-side-diff {
   
   
            background-color: #dfd;
          }
        }
      }
    }
  }
</style>

2、Vue3.X的项目

npm i v-code-diff@1.3.2

父页面:index.vue

<template>
  <div style="padding: 100px;">
    <CodeDiff />
  </div>
</template>

<script>
import CodeDiff from './components/codeDiff'

export default {
   
   
  components: {
   
   
    CodeDiff
  },
  data: () => ({
   
   

  }),
}
</script>

子组件:codeDiff.vue

<template>
  <div class="v-code-diff">
    <code-diff
      :old-string="oldValue"
      :new-string="newValue"
      :context="10"
      outputFormat="side-by-side"
    />
  </div>
</template>

<script>
  import {
   
    CodeDiff } from 'v-code-diff'

  export default {
   
   
    components: {
   
   
      CodeDiff
    },
    data: () => ({
   
   
      // 旧值
      // oldValue: 'Starting  ~',

      oldValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 520.' +
                '吾,当成赤龍之霸王!沉入红莲炼狱,将真红之光辉指引天道!',

      // 新值
      newValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 1314.' +
                'Finished Spring Data repository scanning in 36 ms. Found 0 LDAP repository interfaces.' +
                'Started TornaApplication in 4.848 seconds (JVM running for 5.829) ~'

      // newValue: 'Starting  ~'
    }),
    watch: {
   
   

    },
    created() {
   
   

    },
    methods: {
   
   
      /**
       * 设置新旧资源值方法句柄
       */
      handleSetResourceValues(oldValue, newValue) {
   
   
        this.oldValue = oldValue;
        this.newValue = newValue;
        console.log("setResourceValues =>", this.oldValue, this.newValue);
      }
    }
  };
</script>

<style lang="less" scoped>
  .v-code-diff {
   
   
    margin: 0;
    padding: 0;
  }
</style>

3、效果如下

目录
相关文章
|
6月前
|
JavaScript
vue-cli创建vue3+ts项目
vue-cli创建vue3+ts项目
66 0
|
前端开发 JavaScript API
vue3-ts-storybook:理解storybook、实践 / 前端组件库
vue3-ts-storybook:理解storybook、实践 / 前端组件库
468 0
|
JavaScript 前端开发
vue3瀑布流布局(使用 Vue 3 框架的单文件组件格式(Single-File Component)编写的)
vue3瀑布流布局(使用 Vue 3 框架的单文件组件格式(Single-File Component)编写的)
469 0
|
4月前
|
算法 JavaScript 前端开发
深入了解Vue2和Vue3的Diff算法差异!
总的来说,Vue3在Diff算法上的优化体现了更智能的静态内容处理、更高效的动态内容更新以及更灵活的内部结构。这些优化使得Vue3在运行时性能上有了显著的提升,尤其是在大型应用和复杂界面的场景下。通过不断地技术迭代和优化,Vue3为开发者提供了更高效、更易用的前端开发体验。
370 6
|
3月前
|
JavaScript 前端开发 C++
使用 Vue-Cli 创建 Vue3+TS 项目并整合 ElementPlus、Axios 等组件或插件
本文详细记录了如何使用Vue-Cli工具创建一个Vue3+TypeScript项目,并整合ElementPlus组件库和Axios等插件,包括项目的创建、配置、启动和插件封装使用等步骤。
62 0
|
4月前
|
API
Vue2和Vue3的区别,OptionsAPI与CompositionAPI的区别,Vue2所有的数据,都写在data和method方法中,setup是一个全新的配置项,Vue2是选项式API的写法
Vue2和Vue3的区别,OptionsAPI与CompositionAPI的区别,Vue2所有的数据,都写在data和method方法中,setup是一个全新的配置项,Vue2是选项式API的写法
|
JavaScript C++ Windows
VS code运行vue项目
VS code运行vue项目
504 0
|
资源调度 算法 JavaScript
从Vue2源码看diff算法
从Vue2源码看diff算法
|
算法 JavaScript BI
全面解析 vue3.0 diff算法
彻底弄清楚 diff 算法
|
JavaScript 算法 索引
[vue.js设计和实现]简单的Dom Diff算法
[vue.js设计和实现]简单的Dom Diff算法
98 0