跳至主要內容
Monorepo 管理端项目搭建记录

概述

使用 pnpm workspaces + Turborepo 搭建 Monorepo 架构的管理端全栈项目。后端采用 NestJS + TypeORM + MySQL,前端采用 Vite + Vue 3 + Element Plus,前后端共享类型定义。

技术栈

技术 说明
包管理 pnpm workspaces Monorepo 标准方案
构建 Turborepo 增量构建、任务编排
后端 NestJS + TypeORM TypeORM 与 NestJS 深度集成
数据库 MySQL 关系型数据库
前端 Vite + Vue 3 + Element Plus + Pinia + Vue Router 现代前端方案
测试 Vitest(前后端统一) 兼容 Vite 生态
API 文档 @nestjs/swagger(OpenAPI) 自动生成接口文档

Mr.Ding大约 2 分钟vue
面试题

清除掉源码中没有使用的方法和css样式

  1. 删除无用js代码 使用 Tree Shaking 树摇优化 限制: js ESM 模块
  2. 删除无用css样式 使用 PurgeCSS (CSS 原子化)

项目更新提示

let lastSrcs;

const scriptReg = /\<script.*src=["'](?<src>[^"']+)/gm;

async function getSrcs() {
  const html = await fetch(`/?_timestamp=${Date.now()}`).then(res => res.text());

  scriptReg.lastIndex = 0;
  const srcs = [];
  let match;
  while ((match = scriptReg.exec(html))) {
    srcs.push(match.groups.src);
  }

  return srcs;
}
async function checkUpdate() {
  const srcs = await getSrcs();
  if (lastSrcs) {
    const diff = srcs.filter(src => !lastSrcs.includes(src));
    if (diff.length) {
      console.log('有新的脚本更新了', diff);
      return true;
    } else {
      return false;
    }
  }
}

const time = 2000;
function check() {
  setTimeout(async () => {
    const hasUpdate = await checkUpdate();
    if (hasUpdate) {
      const res = comfirm('有新的脚本更新了,是否刷新页面?');
      if (res) {
       location.reload();
      }
    } else {
      check();
    }
  }, time);
}


Mr.Ding小于 1 分钟vuevue面试题
vue问题集合

mixins 调用顺序

Mixin 钩子按照传入顺序依次调用,并在调用组件自身的钩子之前被调用。

element

  • 合计变形处理 ,修改是否显示合计判断 源码为判断data数据 注释掉
  • 时间范围选择器中defaultTime 对于默认值无用,只能选中后才会触发自动拼接
  • table 暂无数据 出现横向滚动条,不是在可视范围居中 注释掉 // width: this.bodyWidth,
  • 过滤方法没有数据的时候,不显示暂无数据,在判空的时候少了一个_vm.tableData.length === 0判断

Mr.Ding小于 1 分钟vuevue 问题集合