多个vue项目,后台接口都是一样的,每个vue项目的同一个页面都只是一小部分修改,怎样把公共的代码提出来复用?

请教,多个vue项目,后台接口都是一样的,每个vue项目的同一个页面都只是一小部分修改,怎样把公共的代码提出来复用?

比如:project1,project2项目的所有页面都是一样的,project1/src/a.vue和project2/src/a.vue只有几行代码不一样,可以通过判断处理,a.vue的其他代码怎么复用?

阅读 1k
avatarAI BotBETA

回答

为了在多个 Vue 项目中复用公共代码,特别是当后台接口和页面大部分内容都相同时,你可以采取以下几种方法:

1. 创建公共库

将公共的代码抽取到一个独立的 npm 包或 Git 子模块中。这个公共库可以包含组件、Vuex store 模块、API 请求函数等。

  • 步骤

    1. 创建一个新的 npm 包或 Git 子模块。
    2. 将公共的 Vue 组件、Vuex store、API 请求等代码移到这个公共库中。
    3. 在各个项目中安装这个公共库。
    4. 在各个项目中引用公共库中的代码。
  • 示例

    # 创建一个新的 npm 包
    npm init library my-vue-common-lib
    # 或者克隆一个现有的 Git 子模块
    git submodule add <repo-url> my-vue-common-lib

    然后在各个项目中:

    # 安装 npm 包
    npm install my-vue-common-lib
    # 或者更新 Git 子模块
    git submodule update --init --recursive

2. 使用 Vue CLI 插件

如果多个项目使用相同的构建工具(如 Vue CLI),可以创建一个 Vue CLI 插件来注入公共代码。

  • 步骤

    1. 创建一个 Vue CLI 插件。
    2. 在插件中定义需要注入的公共代码(如组件、store 等)。
    3. 在各个项目中安装并使用这个插件。
  • 示例

    # 创建 Vue CLI 插件
    vue create my-plugin
    cd my-plugin
    vue add plugin
    # 按照提示创建插件

    然后在各个项目中:

    # 安装并使用插件
    vue add my-plugin

3. 条件渲染和配置

对于只有小部分代码不同的页面,可以使用条件渲染和配置来处理不同的逻辑。

  • 步骤

    1. 在公共组件中,使用 v-ifv-else 来根据不同的条件渲染不同的部分。
    2. 通过 props、Vuex store 或环境变量传递配置信息来控制条件。
  • 示例

    <!-- 公共组件 a.vue -->
    <template>
      <div>
        <!-- 公共部分 -->
        <p>这是公共部分</p>
        <!-- 条件渲染 -->
        <div v-if="isProject1">
          <!-- Project1 特有的部分 -->
          <p>这是 Project1 特有的部分</p>
        </div>
        <div v-else>
          <!-- Project2 特有的部分 -->
          <p>这是 Project2 特有的部分</p>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      props: ['isProject1']
    }
    </script>

    然后在各个项目中传递 isProject1 prop:

    <!-- Project1 中的使用 -->
    <template>
      <a-vue :isProject1="true"></a-vue>
    </template>
    
    <!-- Project2 中的使用 -->
    <template>
      <a-vue :isProject1="false"></a-vue>
    </template>

通过这些方法,你可以有效地复用多个 Vue 项目中的公共代码,同时处理不同项目中的小部分差异。

3 个回答
✓ 已被采纳

一个主分支作为公共部分,比如叫 main
从主分支新建分支作为实际的项目分支,比如 project1,project2
所有项目都要修改的部分在主分支上修改,然后再合入项目分支
某个项目内部的更改就在那个项目所在的分支修改

对于只有小部分代码不同的页面,可以使用条件渲染和配置来处理不同的逻辑

<!-- 公共组件 a.vue -->
<template>
  <div>
    <!-- 公共部分 -->
    <p>这是公共部分</p>
    <!-- 条件渲染 -->
    <div v-if="isProject1">
      <!-- Project1 特有的部分 -->
      <p>这是 Project1 特有的部分</p>
    </div>
    <div v-else>
      <!-- Project2 特有的部分 -->
      <p>这是 Project2 特有的部分</p>
    </div>
  </div>
</template>

<script>
export default {
  props: ['isProject1']
};
</script>

在各个项目中传递 isProject1 prop:

<!-- Project1 中的使用 -->
<template>
  <a-vue :isProject1="true"></a-vue>
</template>

<!-- Project2 中的使用 -->
<template>
  <a-vue :isProject1="false"></a-vue>
</template>

把公共的部分提取出来,封装成一个npm包,开放不同的部分的api接口自定义,就像二次封装组件库一样。这样每个项目都可以安装这个npm包,然后引入包使用即可。如果要开放成公共的npm包,建议编写完善的单元测试,如果只是公司私用,可以发私有npm包,单元测试建议也可以写上(方便后续其它用户使用,当然也可以不写),不过最好写上该包的使用方式。

至于具体的业务页面/组件的封装,那就要视你的具体需求而定了,比如用到的工具函数,可以写成lodash那样的包,组件写成组件包。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏