Vue项目组件化改造及建立公共组件库详解

Vue组件库demo git地址: https://github.com/xubaodian/Wstl-UI.git

现在绝大部分公司都已经采用组件化的方式进行web开发,无论是使用Vue,还是使用React等等,基本的开发步骤如下:

1、需求论证,讨论出项目基本需求。

2、交互设计,ui设计,接口设计。这个阶段把业务模型确定下来,UI基本确定,与后台约定接口形式。

3、构建前端项目,基于Vue或React等等,根据交互和UI设计进行任务分工,不同人员开发不同的页面。

4、每个web开发人员拿到任务后,首先把页面划分成组件,然后进行开发,如何用到其它项目组件,直接复制过来。

5、组件合并起来组成页面进行联调,并最终打包前端页面。

有相当一大部分公司或项目开发方式都是如此,这么开发其实有两个弊端,十分明显。

1、伪组件化

我们知道,组件化开发的目的是解耦功能,提高代码复用率和开发效率,进而加快项目开发周期与产品发布速度。如果我们仅仅是把页面分成几个部分,各自为政,这其实不是组件化开发。

因为在项目里,多个页面之间大部分时候,能提取很多公共组件出来(文件上传,搜索框,时间输入,工具栏等等),如果这些组件每个开发人员都实现,无疑是浪费时间的。

2、项目间组件管理麻烦

假如我们新的项目需要大量用到其它项目已实现的组件,很多人会把其它项目的组件直接复制过来,这其实是不利于组件管理的,因为组件代码在多个项目中都有,假如这个组件实现是有缺陷的,我们必须在多个项目中进行修改。如何这种问题经常存在,而且项目又多,给代码管理带来很多工作。

这些问题有什么好的解决办法呢?

针对问题1,要求web开发人员多做沟通,对业务进行抽象,尽可能把项目中可能复用的组件抽象出来(文件上传,搜索框,时间输入,工具栏等等),单独开发,应用到各个页面中。这样问题1就解决了。

针对问题2,有什么好的方案呢?

我们应该注意到平时引用其它组件或框架时,一般都是npm直接安装到项目中,然后使用。我们如果也能建立自己的组件库,通过npm安装到项目中就好了。

npm除了可安装哪些东西呢?

1、npm官方仓库的上库,插件等。

2、git仓库上的前端库。

3、本地的文件夹。

对于2,3两种情况,文件夹或库必须符合npm的一些标准,具体不细说,可以去npm官方网站上查看。简单来说,用npm init初始化的项目,都可以用npm安装,main的执行文件就是后续import引用的默认文件。

那么问题2的解决办法也就出来了:

建立公共组件库,放到公司私有git仓库上。然后通过npm安装到各个项目中使用。

注意:如果没有私有git仓库,代码又不能放到网上git仓库,可以用如下方法解决,代码放到svn上,然后下载到本地,再通过npm把本地文件夹安装到项目中去。

解决方案已经说了,下面说下具体实现吧,下面的组件库是基于Vue插件实现的。

首先说下Vue插件的开发和使用。

我们使用插件的方法如下:

//导入插件
import MyPlugin from ...;

//注册插件
Vue.use(MyPlugin)
//然后就可以项目中使用该插件了
new Vue({
  //... options
})

以Vue官方路由插件Vue-Router来说:

import Vue from 'vue';
import VueRouter from 'vue-router';

// 注册路由
Vue.use(VueRouter)

这样就可以在项目中使用Vue路由了。

插件的注册原理是什么呢?

Vue.use注册插件的时候,会调用插件的install方法,该方法的第一参数是Vue构造器,插件可以通过install方法,将插件,函数,组建等等注册到Vue构造器上。代码如下:

MyPlugin.install = function (Vue, options) {
  // 1. 添加全局方法或属性
  Vue.myGlobalMethod = function () {
    // 逻辑...
  }

  // 2. 添加全局资源命令
  Vue.directive('my-directive', {
    bind (el, binding, vnode, oldVnode) {
      // 逻辑...
    }
    ...
  })

  // 3. 注入组件
  Vue.mixin({
    created: function () {
      // 逻辑...
    }
    ...
  })
  //或通过下面方法注入组建,name是组件名,component是组件实例
  Vue.component(name, component);

  // 4. 添加实例原型方法
  Vue.prototype.$myMethod = function (methodOptions) {
    // 逻辑...
  }
}

通过以上方法,我们可以给Vue实例添加自定义命令,原型方法,注入组建,添加全局方法等等。

我们可以新建Vue项目,作为组件库放到git仓库上,然后通过npm安装到其它项目中。

组件库的搭建过程挺麻烦,不一一讲解,我直接把我搭建好的demo地址发出来,需要的可以直接下载:git地址: https://github.com/xubaodian/Wstl-UI.git

简单解释下demo:

packages文件夹是组件地址,packages/index.js是组件入口地址,所有组件都在install方法中注册到Vue实例中。

config文件夹下是webpack配置,是我自己写的,参考Vue官方脚手架的webpack配置,有些区别,在文件中都有注释。

webpack.dev.js:启动example的webpack配置,example用来测试组件

webpack.prod.js:生成example的生产环境文件的webpack配置

webpack.common.js:打包组件库的webpack配置,所有组件生成一个js文件和一个css文件

webpack.component.js:分开打包组件的webpack配置,每个组件生成一个js文件和一个css文件

src文件夹下是测试组件的Vue项目。

有什么疑问可以在给我留言,或发邮件给我,[email protected],或在github上留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章