vue cli+webpack+vue router 前端开发

开发环境

vue 2.x webpack vuex axios vue-router

开发优化

vue-router 的自动化导入(中轻量级项目适合)

思路: 利用webpack的require.context 固定的页面目录结构

页面目录结构示例:

  yourModule
  -- pages
  -- -- yourModule.index.vue
  -- -- yourModule.otherpage.vue
  -- index.routes.js

index.routes.js 示例

import getRoutes from '@/utils/get-routes.js'

// 获取页面的父文件'./pages' ,/.vue/ 需匹配的页面特征 两者可自定义
const r = require.context('./pages', true, /.vue/)

export default getRoutes(r)

获取模块routes.js示例

/**
 * 获取路径信息
 * @param {string} r 
 * @param {Array} titleArr 
 * @param {Array} iconArr 
 * @returns {Object}
 */

/**
 * constantRoutes Engineering
 * -----------------------------------------------------------------------
 */
export default function getRoutes(r) {
    const routeName = r.keys()[0].split('.')[1]
    let routeObj = {
        path: routeName,
        children: [],
        meta: {
            title: formatteComp(routeName),
            icon: ''
        }
    }
    r.keys().forEach((_key, _index) => {
        let _keyArr = _key.split('.')
        if (_key.indexOf('index') != -1) {
            routeObj.children.push({
                path: 'index',
                component: r(_key).default,
                meta: {
                    title: formatteComp(_keyArr[1]),
                    icon: ''
                }
            })
        } else {
            routeObj.children.push({
                path: formatteComp(_keyArr[2]),
                component: r(_key).default,
                meta: {
                    title: formatteComp(_keyArr[2]),
                    icon:  ''
                }
            })
        }
    });

    //格式化参数
    function formatteComp(rr) {
        return rr.replace(/\//, '')
    }
    return routeObj
}
/**
 * -------------------------------------------------------------------------------
 */

这是英文的导航名称,一般开发需要中文的名称与英文的目录名称对应,可以手动做个配置项。

webpack 打包优化

思路:提前打包固定js

  webpack.dll.js //自定义文件
  webpack.base.conf.js
  webpack.dev.conf.js
  webpack.prod.conf.js

#### vue mvvm 原理
1. 网上有好多说是用的document.creatDocumentFragment,但阅读源码是用的el.cloneNode(true),
vue/dist/vue.common.dev.js 这个文件中
2. vue数据响应,应是对象数组,直接的数组是不可以的
3. vue 的Object.defineProperty 对象属性设置,data的响应监听不支持新增属性
4. v-if 与 v-show 可以同时使用,并且 v-if 的优先级高于v-show

上一篇
下一篇