vue分层项目架构搭建过程与踩过的坑

2023-11-06

项目介绍:
公司已有saas项目,因为需求变动前后端都相应的做出架构调整,后端采用分层模式开发,要求每个模块可单独发布,可按客户需求单模块部署到客户服务器,所以前端的框架要求也要符合这个需求。

前端具体需求:
1、客户有自己的系统需要引入我们产品某一个模块,前提是客户的系统也是vue项目
2、客户没有自己的系统,需要我们某一个模块的整体可运行项目
3、客户自己的系统是非vue项目,引入我方产品模块

可行性分析:
需求1:vue项目引入我方模块,可采取疯转ui组件方式,供第三方 npm install 我方模块
把我方产品每个页面封装成一个组件,客户方只需建立的自己的router和对应的view层,view层页面只需放入组件
需求2:可将现有系统按模块拆分出多个子项目,每个项目都可publish和build,这样既能满足单独引入组件又可运行成为独立项目
需求3:可用需求2的方式,独立运行

架构目录思考:
由于一般vue项目的dist目录放置build后的文件,所以我在根目录先建立一个名为“package”目录用来放置npm run package后的文件
接下来是安排src下的目录
packages 目录 用来放置所有组件需要的资源和组件,npm run package会把此目录下的所有文件打包到根目录的package文件夹
view 目录 建立此子项目所有的路由支持页面,此目录vue开发最简单,只需要导入packages 目录下的组件放入页面就可以
router 目录 用于本项目独立运行的router设置
app.vue
main.js

packages目录下可自行安排,我先说说我自己的安排
components目录 放置所有组件 每个组件对应一个文件夹

每个目录都暴露一个Index.js,代码如下

import login from './login.vue'
// 可用于分组件引入,不做多解释
login.install = function (Vue) {
  Vue.component(login.name, login);
};
export default login

api目录 整理整个项目用到的所有请求地址,可暴露给第三方引用者灵活设置
libs目录 一些公用的js 其中axios封装采用的是iview-admin 项目中的封装方法,但是第一个坑也出现了,这个坑留到后面一起说,都是泪啊
styles目录 放所有的样式文件和样式需要的图片,这里也有坑,先挖出来 留在后面填
index.js

import './styles/index.less';
import login from './components/login/index.js'
const ydui = {
  login: login
}
const install = function (Vue, opts = {}) {
  Object.keys(ydui).forEach(key => {
    Vue.component(key, ydui[key]);
  });
  // 这里用于第三方设置本项目所有请求地址的url,
  // 因为是部署到第三方的服务器,所以这里要可灵活配置
  Vue.prototype.$YDUI = {
    baseUrl: opts.baseUrl || ''
  }
}

if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue);
}
const API = {
  install,
  ...ydui
}

export default API

踩过的坑:
整个框架搭建就是个坑坑洼洼过来的,前面的架构介绍现在总结起来看起来很简单,但这也是一个一个坑踩过来,整个过程不多说了,先说几个影响比较大的坑也是我费尽千辛万苦踩爬出来的

1、baseUrl问题,iview-admin 封装axios具体做法 自行查看
libs/api.request.js的修改

import HttpRequest from './axios'
import Vue from 'vue'
// 判断第三方是否设置了此组件暴露的全局属性,没有的话就用我方自己的url
let baseUrl = Vue.prototype.$YDUI : Vue.prototype.$YDUI.baseUrl ? '我方自己的url'
const axios = new HttpRequest(baseUrl)
export default axios

写完也一直没测试,我还觉得挺完美的,可在一个新项目引入此组件时问题就出来了,新项目引入和设置方法如下:

import ydcommon from 'yd-common'
import 'yd-common/package/ydcommon.min.css'
Vue.use(ydcommon, {
  baseUrl: 'http://gateway.dev.com'
})

悲剧的是,我的请求地址无法获取此设置的url,然后我就开始各种实验,在axios的拦截器里获取、自写wacth等方法都试过了,这个问题一直研究了半天,后来静下来又查看了iview-ui的源码才想明白了一个道理,iview-ui也有通用设置,但是他们获取通用设置的地方都是在vue组件内,想了想也就了然了,我封装的axios是在外部js里,先于vue运行,是无法获取后面设置的属性的,所以我就转变了个思路,让这个设置在组件里运用就能生效 所以libs/api.request.js我做了以下修改

const axios = function (api) {
    let url = api ? api : '我方url'
    return new HttpRequest(url)
}
export default axios

在组件里调用时要传参:

axios(this.$YDUI.baseUrl).request()

测试通过,长出了一口气,不管解决方法优雅不优雅吧,总算是解决了

2、图片不显示问题

上面的问题解决了 刚高兴了没一会,突然发现我组件中的大背景图都没出现,一开始没注意以为不是什么大事,可现在有时间研究了才发现不知道咋解决,尴尬不 -_-||
首先着手的是查看路径问题,因为在导出的icon都被转换成了base64码,所以对目录不对的问题就产生了怀疑,webpack设置里output.publishPath 我大胆尝试,有一次修改完测试直接黑屏报路径错误,所以之前对路径错误的怀疑直接否掉了,路径真错的话肯定会报错。
开始了我的baidu之旅,结果搜不到。。。是真的搜不到关于我的问题一点都没有,获取知识的主要途径断了我就开始了各种技术群 找大佬问,估计大佬们都日理万机没人理我,有几个理我的 也说不出个所以然来,但是我也不能停下我的各种尝试。
DuangDuangDuang。。。我擦,解决了!要问我咋解决的我只能说瞎猫碰死耗子,我只能把修改的地方放出来

module.exports = {
  entry: {
    'ydcommon': './src/packages/index.js'
  },
  output: {
    path: path.resolve(__dirname, '../package'),
    publicPath: './',
    library: 'ydcommon',
    libraryTarget: 'umd',
    umdNamedDefine: true
  }

其实这还有个坑,css的background里的图片都能显示了,但是在组件里的标签中的图片无法显示,只能把这些地方改用css写来规避了,能力有限只能取巧。

放出gitHub地址yd-cmmon,喜欢别忘了star,多多交流

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue分层项目架构搭建过程与踩过的坑 的相关文章

随机推荐

  • Cannot apply to AuthenticationConfiguration already built object

    前言 Spring Security 在Spring Boot 2 7 0中升级已弃用的WebSecurityConfigrerAdapter 并且根据 EnableWebSecurity推荐自定义配置类后 还是错误的问题 失败的案例 首先
  • 多元线性回归模型的F检验

    F检验 对于多元线性回归模型 在对每个回归系数进行显著性检验之前 应该对回归模型的整体做显著性检验 这就是 F检验 当检验被解释变量 yt与一组解释变量 x 1 x 2 xk 1是否存在回归关系时 给出的零假设与备择假设分别是 H0 b1
  • vc++2010安装教程

    vc 2010是微软公司开发的一个专门用来编写C语言或C 的一个简化般的IDE 本章我们就来安装一下这个IDE 链接 https pan baidu com s 18TEvNMeUSFtSrysWNZ 4nw提取码 cnmk这个百度网盘里面
  • pipe和fork浅析

    pipe和fork浅析 fork pipe fork fork 是linux上创建子进程的系统调用 fork 函数一次调用两次返回 在父进程返回值是子进程的进程id 在子进程的返回值是0 fork 创建出来的子进程会从fork 函数后面开始
  • sqlserver 对表列的添加、修改、删除

    修改列 alter table 表名 alter column 列名 类型 alter table g contractLog alter column optContent nvarchar 50 添加列 alter table 表名 a
  • SPPNet详解(白话讲解——附图文)

    SPPNet是何凯明大神提出的 为了解决R CNN中速度慢问题 在神经网络中输入图片的尺寸必须是固定的 这是因为在设计的时候FC层中神经元的个数都是固定的 导致输入图片尺寸必须是固定的 CNN是可以适应不同尺寸的输入图片 说明在CNN后面加
  • C#使用FFMpeg.Autogen进行rtsp视频倍速播放

    1 在你的C 项目中 使用NuGet包管理器安装FFMpeg Autogen 可以在Visual Studio中打开NuGet包管理器控制台 并运行以下命令来安装它 Install Package FFMpeg Autogen 2 在代码引
  • 环形链表II

    环形链表II 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos
  • S-DES

    S DES即simplifed DES S DES算法的输入是一个8位的明文或者密文组和一个10位的密钥 输出是一个8位的密文或者明文组 以下是S DES所需的几个置换表 P10 3 5 2 7 4 10 1 9 8 6 P8 6 3 7
  • 去掉 Powered by Discuz! 6.0.0 © 2001-2007 Comsenz Inc.

    去掉 Powered by Discuz 6 0 0 2001 2007 Comsenz Inc templates default footer htm 倒数第15行 16行删除 即下面的代码 Powered by Discuz vers
  • 图形学数学基础之重要性采样(Importance Sampling)

    作者 i dovelemon 日期 2017 08 06 来源 CSDN 主题 Importance Sampling PDF Monte Carlo 引言 前面的文章 图形学数学基础之基本蒙特卡罗尔积分 Monte Carlo Integ
  • 数组访问越界问题

    1 什么是数组访问越界 我们通过数组的下标来得到数组内指定索引的元素 这称作对数组的访问 如果一个数组定义为有n个元素 那么 对这n个元素 下标为0 到 n 1的元素 的访问都合法 如果对这n个元素之外的访问 就是非法的 称为 越界 数组占
  • Customplot画多条折线图,同时可以控制每条曲线的隐藏和显示

    Customplot多条曲线的控制 前言 开始使用Qcharts画图 大数据性能极差 于是转用Customplot画图 主要进行数据的实时更新和大量数据的加载 一 模拟数据 采用子线程创建模拟数据 采用队列存储 pragma once in
  • PostgreSQL简单使用介绍

    之前没怎么接触各类数据库 现在对新上手的数据库都来学习一番 项目组经常用到的数据库和新使用的数据库都会做个笔记 本篇讲讲postgresql 1 安装配置postgresql 参考网址 https blog csdn net DaSo CS
  • LINUX驱动开发学习笔记---GCC编译器

    一 GCC编译器基础使用 Q 为什么需要GCC编译器 A 在Windows下我们 可以 使用各种各样的 IDE进行编程 比如强大的 Visual Studio 它既可以编辑也可以编译 但是linux下vi或vim编辑器只能用于编辑 不能编译
  • 【机器学习】最大熵算法 整理

    最大熵模型由最大熵原理推导实现 1 最大熵原理 最大熵原理认为 学习概率模型时 在所有可能的概率模型 分布 中 熵最大的模型是最好的模型 通常用约束条件来确定概率模型的集合 所以 最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的
  • Python如何把 dict 快速转换为namedtuple

    下面的代码可能让你更容易理解
  • Maven实战(三)Eclipse构建Maven项目

    1 Eclipse安装m2eclipse插件 见eclipse maven plugin 插件 安装 和 配置 2 构建Maven项目 2 1 创建简单Maven项目 点击Eclipse菜单栏File gt New gt Ohter gt
  • FastApi-21-APIRouter

    Part1背景 通常在我们开发 app 时都会用到路由 像 Flask 有 blueprint Django 有 urls 等 其目的都是为了路由汇总管理 FastApi 也不例外 其拥有 APIRouter 今天我们就一起来了解 APIR
  • vue分层项目架构搭建过程与踩过的坑

    项目介绍 公司已有saas项目 因为需求变动前后端都相应的做出架构调整 后端采用分层模式开发 要求每个模块可单独发布 可按客户需求单模块部署到客户服务器 所以前端的框架要求也要符合这个需求 前端具体需求 1 客户有自己的系统需要引入我们产品