【项目管理后台】Vue3+Ts+Sass实战框架搭建一

news2024/11/27 4:28:47

项目管理后台

      • 建立项目
          • 最好是卸载Vetur
      • 新建.env.d.ts文件
      • 安装Eslint
          • 安装校验忽略文件
          • 添加运行脚本
      • 安装prettier
          • 新建.prettierrc.json添加规则
          • 新建.prettierignore忽略文件
      • 安装配置stylelint
          • 新建.stylelintrc.cjs
      • 添加后的运行脚本
      • 配置husky
      • 配置commitlint
          • 配置husky
      • 强制使用pnpm包管理器工具
          • 配置命令
      • 集成element-plus
          • button的icon使用不生效的问题
          • 使用多个icon有报错,-解决思路
      • 国际化配置
          • 国际化配置有可能造成打包失败
      • src别名的配置
      • 环境变量的配置
      • SVG图标的配置
          • 全局配置svg
      • 全局组件
      • 集成sass
          • 设置项目清除默认样式文件
          • 设置全局样式文件
          • 设置全局scss样式变量文件

建立项目

  • pnpm安装:npm i -g pnpm
  • 项目建立:pnpm create vite
  • 项目初始化:pnpm i
  • 项目运行:pnpm run dev
最好是卸载Vetur

新建.env.d.ts文件

  • 解决导入./App.vue 的报错
/// <reference types="vite/client" />
declare module '*.vue' {
  import type { DefineComponent } from 'vue'

  const vueComponent: DefineComponent<{}, {}, any>

  export default vueComponent
}

安装Eslint

  • 保证代码质量

  • pnpm i eslint -D

  • 加载eslint的文档
    在这里插入图片描述

  • 会自动产生.eslintrc.cjs文件

  • 安装相关校验设置pnpm install -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier eslint-plugin-node @babel/eslint-parser

安装校验忽略文件
  • .eslintignore文件
    在这里插入图片描述
添加运行脚本
  • package.json添加运行脚本
  • 通过pnpm run lint去检测语法,如果出现不规范格式,通过pnpm run fix 修改
    在这里插入图片描述

安装prettier

  • 保证代码美观
  • 安装:pnpm install -D eslint-plugin-prettier prettier eslint-config-prettier
新建.prettierrc.json添加规则
{
  "singleQuote": true,
  "semi": false,
  "bracketSpacing": true,
  "htmlWhitespaceSensitivity": "ignore",
  "endOfLine": "auto",
  "trailingComma": "all",
  "tabWidth": 2
}
新建.prettierignore忽略文件
/dist/*
/html/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*

安装配置stylelint

  • 可格式化css代码,检查css语法错误与不合理的写法,指定css书写顺序
  • 使用sass
pnpm add sass sass-loader stylelint postcss postcss-scss postcss-html stylelint-config-prettier stylelint-config-recess-order stylelint-config-recommended-scss stylelint-config-standard stylelint-config-standard-vue stylelint-scss stylelint-order stylelint-config-standard-scss -D
新建.stylelintrc.cjs
  • 官网:https://stylelint.bootcss.com/
module.exports = {
  extends: [
    'stylelint-config-standard', // 配置stylelint拓展插件
    'stylelint-config-html/vue', // 配置 vue 中 template 样式格式化
    'stylelint-config-standard-scss', // 配置stylelint scss插件
    'stylelint-config-recommended-vue/scss', // 配置 vue 中 scss 样式格式化
    'stylelint-config-recess-order', // 配置stylelint css属性书写顺序插件,
    'stylelint-config-prettier', // 配置stylelint和prettier兼容
  ],
  overrides: [
    {
      files: ['**/*.(scss|css|vue|html)'],
      customSyntax: 'postcss-scss',
    },
    {
      files: ['**/*.(html|vue)'],
      customSyntax: 'postcss-html',
    },
  ],
  ignoreFiles: [
    '**/*.js',
    '**/*.jsx',
    '**/*.tsx',
    '**/*.ts',
    '**/*.json',
    '**/*.md',
    '**/*.yaml',
  ],
  /**
   * null  => 关闭该规则
   * always => 必须
   */
  rules: {
    'value-keyword-case': null, // 在 css 中使用 v-bind,不报错
    'no-descending-specificity': null, // 禁止在具有较高优先级的选择器后出现被其覆盖的较低优先级的选择器
    'function-url-quotes': 'always', // 要求或禁止 URL 的引号 "always(必须加上引号)"|"never(没有引号)"
    'no-empty-source': null, // 关闭禁止空源码
    'selector-class-pattern': null, // 关闭强制选择器类名的格式
    'property-no-unknown': null, // 禁止未知的属性(true 为不允许)
    'block-opening-brace-space-before': 'always', //大括号之前必须有一个空格或不能有空白符
    'value-no-vendor-prefix': null, // 关闭 属性值前缀 --webkit-box
    'property-no-vendor-prefix': null, // 关闭 属性前缀 -webkit-mask
    'selector-pseudo-class-no-unknown': [
      // 不允许未知的选择器
      true,
      {
        ignorePseudoClasses: ['global', 'v-deep', 'deep'], // 忽略属性,修改element默认样式的时候能使用到
      },
    ],
  },
}

添加后的运行脚本

  • 运行format可以更新{}里的代码,包括css
"scripts": {
    "dev": "vite --open",
    "build": "vue-tsc && vite build",
    "preview": "vite preview",
    "lint": "eslint src",
    "fix": "eslint src --fix",
    "format": "prettier --write \"./**/*.{html,vue,ts,js,json,md}\"",
    "lint:eslint": "eslint src/**/*.{ts,vue} --cache --fix",
    "lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"
  },

配置husky

  • 多人开发时,可以强制让开发人员再代码提交之前触发git hook(客户端的钩子)
  • 注意:需要有代码仓库
  • 然后自动执行pnpm run format来格式化我们的代码
  • 安装husky:pnpm install -D husky
  • 执行npx husky-init,自动生成.husky目录,在这个目录下面会有一个pre-commit文件,这个文件里面的命令在我们执行commit的时候就会执行
  • 写入之前写的格式化命令
    在这里插入图片描述

配置commitlint

  • 对于代码的提交commit信息,也是有统一规范,不能随便写
  • 让每个人按照规范写入实现
  • 安装:pnpm add @commitlint/config-conventional @commitlint/cli -D
  • 新建commitlint.config.cjs
module.exports = {
  extends: ['@commitlint/config-conventional'],
  // 校验规则
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feat',
        'fix',
        'docs',
        'style',
        'refactor',
        'perf',
        'test',
        'chore',
        'revert',
        'build',
      ],
    ],
    'type-case': [0],
    'type-empty': [0],
    'scope-empty': [0],
    'scope-case': [0],
    'subject-full-stop': [0, 'never'],
    'subject-case': [0, 'never'],
    'header-max-length': [0, 'always', 72],
  },
}

package.json中配置scripts命令

# 在scrips中添加下面的代码
{
"scripts": {
    "commitlint": "commitlint --config commitlint.config.cjs -e -V"
  },
}
配置husky
  • 执行下面命令
npx husky add .husky/commit-msg 
  • 执行完多出一个文件
  • 添加pnpm commitlint指令
    在这里插入图片描述
  • 当我们 commit 提交信息时,就不能再随意写了,必须是 git commit -m ‘fix: xxx’ 符合类型的才可以,需要注意的是类型的后面需要用英文的 :,并且冒号后面是需要空一格的,这个是不能省略的
'feat',//新特性、新功能
'fix',//修改bug
'docs',//文档修改
'style',//代码格式修改, 注意不是 css 修改
'refactor',//代码重构
'perf',//优化相关,比如提升性能、体验
'test',//测试用例修改
'chore',//其他修改, 比如改变构建流程、或者增加依赖库、工具等
'revert',//回滚到上一个版本
'build',//编译相关的修改,例如发布版本、对项目构建或者依赖的改动

强制使用pnpm包管理器工具

  • 团队开发项目的时候,需要统一包管理器工具
  • 因为不同包管理器工具下载同一个依赖,可能版本不一样
  • 创建scritps/preinstall.js文件
if (!/pnpm/.test(process.env.npm_execpath || '')) {
  console.warn(
    `\u001b[33mThis repository must using pnpm as the package manager ` +
    ` for scripts to work properly.\u001b[39m\n`,
  )
  process.exit(1)
}
配置命令
"scripts": {
	"preinstall": "node ./scritps/preinstall.js"
}
  • 执行一下pnpm run preinstall
  • 当我们使用npm或者yarn来安装包的时候,就会报错了
  • 原理就是在install的时候会触发preinstall(npm提供的生命周期钩子)这个文件里面的代码

集成element-plus

  • vue3,不能用element-UI,需要用到element-plus
  • 安装pnpm install element-plus --save
  • main.ts里编辑
import { createApp } from 'vue'
import './style.css'
// 引入element-plus插件
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
const app = createApp(App)

app.use(ElementPlus)
app.mount('#app')
button的icon使用不生效的问题
  • 安装: pnpm install @element-plus/icons-vue
<template>
  <div>
    <h1>初始化项目</h1>
    <el-button type="primary" :icon="Edit">我是 ElButton编辑</el-button>
  </div>
</template>
<script setup lang="ts">
import { Edit } from '@element-plus/icons-vue'
</script>

<style scoped lang="sass"></style>
使用多个icon有报错,-解决思路

在这里插入图片描述

  • 修改 tsconfig.json 文件
  • 然后重启一下
"noUnusedLocals": false

在这里插入图片描述

国际化配置

  • 因为目前导入的是展示英文
  • 需要进行国际化配置成中文
    在这里插入图片描述
  • main.ts中
import { createApp } from 'vue'
import './style.css'
// 引入element-plus插件
import ElementPlus from 'element-plus'
// 配置element-plus国际化
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import 'element-plus/dist/index.css'
import App from './App.vue'
const app = createApp(App)

app.use(ElementPlus, {
  locale:zhCn
})
app.mount('#app')

在这里插入图片描述

国际化配置有可能造成打包失败
  • 原因是国际化配置没有ts支持,需要忽略
  • 忽略当前文件ts类型的检测否则有红色提示(打包会失败)
  • 上面添加这个// @ts-ignore
    在这里插入图片描述

src别名的配置

  • 为方便文件的引入,我们需要给 src 文件夹配置一个别名
// vite.config.ts
import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
    plugins: [vue()],
    resolve: {
        alias: {
            "@": path.resolve("./src") // 相对路径别名配置,使用 @ 代替 src
        }
    }
})
// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录
    "paths": { //路径映射,相对于baseUrl
      "@/*": ["src/*"]
    }
  }
}

环境变量的配置

  • 项目开发,经历开发环境,测试环境,和生产环境

  • 为区分不同环境的不同接口请求,可以环境变量配置,让不同环境的切换交给代码自动判断

  • 开发环境(development)

  • 测试环境(testing)

  • 生产环境(production)

//根目录新增三个文件
.env.development
.env.production
.env.test
  • import.meta.env,可以直接获取不同环境的变量,但变量必须是以VITE_开头暴露
NODE_ENV = 'test'
VITE_APP_TITLE = '大宝藏'
VITE_APP_BASE_API = '/test-api'

在这里插入图片描述

SVG图标的配置

  • 矢量图-提示页面加载性能
  • 安装:pnpm install vite-plugin-svg-icons -D
<template>
  <!-- Svg矢量图的封装 -->
  <div>
    <!-- svg:矢量外层容器 -->
    <svg :style="{ width: width, height: height }">
      <use :xlink:href="prefix + name" :fill="color"></use>
    </svg>
  </div>
</template>

<script setup lang="ts">
defineProps({
  //xlink:href属性值的前缀
  prefix: {
    type: String,
    default: '#icon-',
  },
  //svg矢量图的名字
  name: String,
  //svg图标的颜色
  color: {
    type: String,
    default: '',
  },
  //svg宽度
  width: {
    type: String,
    default: '16px',
  },
  //svg高度
  height: {
    type: String,
    default: '16px',
  },
})
</script>
<style scoped></style>
  • 代码使用
    在这里插入图片描述
全局配置svg
  • main.ts里面
//Svg需要到的配置代码
import 'virtual:svg-icons-register'
//全局配置svg组件
import mySvg from '@/components/Svg.vue'
app.component('mySvg', mySvg)

全局组件

  • 按照上面一个组件引入一次,组件多了有点麻烦
  • 所以建立全局组件对象
  • 新建文件styles/index.js
import mySvg from './Svg.vue'
import myCreatead from '@/components/createad.vue'
//全局组件对象
const allGloablComponent = {
  myCreatead,
  mySvg,
}
export default {
  // 必须叫install方法
  install(app) {
    //循环注册为全局对象
    Object.keys(allGloablComponent).forEach((key) => {
      app.component(key, allGloablComponent[key])
    })
  },
}
  • main.ts中挂载
//全局组件注册
import gloablComponent from '@/components'
app.use(gloablComponent)

集成sass

  • 因为之前已经安装过sass
设置项目清除默认样式文件
  • 先新建一个styles/reset.scss文件,用来清除默认样式
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
main, menu, nav, output, ruby, section, summary,
time, mark, audio, video {
	margin: 0;
	padding: 0;
	border: 0;
	font-size: 100%;
	font: inherit;
	vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, main, menu, nav, section {
	display: block;
}
/* HTML5 hidden-attribute fix for newer browsers */
*[hidden] {
    display: none;
}
body {
	line-height: 1;
}
menu, ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}
table {
	border-collapse: collapse;
	border-spacing: 0;
}
设置全局样式文件
  • 再新建一个styles/index.scss,用来当全局样式文件
  • 引入清除默认文件
@import './reset.scss'

在这里插入图片描述

设置全局scss样式变量文件
  • 新建styles/variable.scss
// 项目scss全局变量
// 项目主题变量
$base-color:#79cce2;
$color:red;
  • vite.config.ts中配置全局样式变量文件
  // vite.config.ts文件
  // scss全局变量
  css: {
    preprocessorOptions: {
      scss: {
        javascriptEnabled: true,
        additionalData: '@import "./src/styles/variable.scss";',
      },
    },
  },

在这里插入图片描述

  • 现在页面中就可以直接使用了
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1530679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

resize-observer源码解读

resize-observer github 地址&#xff1a;https://github.com/devrelm/resize-observer 本地启动 npm installnpm startnode 18.16.0 (npm 9.5.1) 启动失败报错 node:internal/crypto/hash:71this[kHandle] new _Hash(algorithm, xofLen);^Error: error:0308010C:digital …

spark RDD 创建及相关算子

RDD编程入口 RDD编程入口对象是SparkContext对象&#xff0c;想要调用相关的计算api都需要通过构造出的sparkcontext对象调用 RDD的创建 通过并行化集合创建RDD&#xff08;本地集合转为分布式&#xff09;&#xff0c;api如下 rdd sc.parrallize(param1, param2)参数1是本…

第112讲:Mycat实践指南:字符串Hash算法分片下的水平分表详解

文章目录 1.字符串Hash算法分片的概念1.1.字符串Hash算法的概念1.2.字符串Hash算法是如何将数据路由到分片节点的 2.使用字符串Hash算法分片对某张表进行水平拆分2.1.在所有的分片节点中创建表结构2.2.配置Mycat实现字符串Hash算法分片的水平分表2.2.1.配置Schema配置文件2.2.2…

边缘检测-Tiny and Efficient Model for the Edge Detection Generalization

源代码: https://github.com/xavysp/TEED 论文地址&#xff1a;https://arxiv.org/pdf/2308.06468.pdf 大多数高级计算机视觉任务依赖于低级图像操作作为其初始过程。边缘检测、图像增强和超分辨率等操作为更高级的图像分析提供了基础。在这项工作中&#xff0c;我们考虑三个…

公众号获取token失败,当日access_token超过1万次处理

问题&#xff1a;如果你当日的 access_token 获取次数已经超过了 1 万次&#xff0c;那么很有可能是由于频繁获取 access_token 而被微信限制了。在这种情况下&#xff0c;你需要等待到下一个自然日或者等待一段时间后再尝试获取 access_token。或者直接去公众号去刷新掉用量。…

JAVA EE (计算机是如何工作的)

学前注意事项 出去面试的时候java岗位不需要懂前端&#xff08;会少量讲解&#xff09; 但是我们做项目的时候多少回用到一些前端的东西 1.什么是计算机 1.1前情提要 不仅仅只有电脑是计算机 计算机还不仅仅是电脑手机和平板 路由器 智能洗衣机 刷脸打卡机都可以说是计算…

MySQL中数据库表的监控

MySQL中数据库表的监控 &#xff08;1&#xff09;查看数据库中当前打开了哪些表&#xff1a;show OPEN TABLES &#xff0c;如图6-1-5所示。另外&#xff0c;还可以通过show OPEN TABLES where In_use > 0过滤出当前已经被锁定的表。 查看数据库中表的状态&#xff1a;SHO…

月销12万,卖出6万件,1688跨境热销榜第一是它!

店雷达1688热销商品榜&#xff0c;食品类目下&#xff0c;月度排名第一的热销商品是这款【三只松鼠_多味鹌鹑蛋混合口味 休闲零食小吃卤蛋夜宵熟食】月销售额达到12万&#xff0c;一个月内卖出5万笔&#xff0c;复购率保持在51%。看来我们的这款中国小吃&#xff0c;也收到很多…

linux -- I2C设备驱动 -- MS32006(低压5V多通道电机驱动器)

产品简述 MS32006 是一款多通道电机驱动芯片, 其中包含两路步进电机驱动, 一路直流电机驱动; 每个通道的电流最高电流1.0A; 支持两相四线与四相五线步进电机。芯片采用 I2C 的通信接口控制模式, 兼容 3.3V/5V 的标准工业接口。 MS32006 总共集成了两路步进电机驱动器与一…

数据分析能力模型分析与展示

具体内容&#xff1a; 专业素质 专业素质-01 数据处理 能力定义•能通过各种数据处理工具及数据处理方法&#xff0c;对内外部海量数据进行清洗和运用&#xff0c;提供统一数据标准&#xff0c;为业务分析做好数据支持工作。 L1•掌握一…

【数据结构】数据结构和算法的重要性复杂度详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;数据结构_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.数据结构和算法 1.1什么是数据结构&#xff1f; 1.2 什么是算法&#xff1f; 1.3 数据结构和算法的重要性 1.4 如何学好数据…

线程和进程的区别和联系

一、什么是进程 进程(Process), 是一个具有独立功能的程序关于某个数据集合的一次运行活动&#xff0c;是系统进行 【资源分配和调度】 的一个独立单位。 进程是【程序】的【一次执行】(是计算机中程序的执行过程&#xff0c;而不是计算机中的程序)进程是系统进行【资源分配和…

【MySQL】知识点 + 1

# &#xff08;1&#xff09;查询当前日期、当前时间以及到2022年1月1日还有多少天&#xff0c;然后通过mysql命令执行命令。 select curdate() AS 当前日期,curtime() AS 当前时间,datediff(2022-01-01, curdate()) AS 距离2022年1月1日还有天数;# &#xff08;2&#xff09;利…

2024年 信息系统管理工程师(中级)

2024年信息系统管理工程师全套视频、历年真题及解析、历年真题视频解析、教材、模拟题、重点笔记等资料 1、2023、2022、2021、2020年全套教程精讲视频。 2、信息系统管理工程师历年真题及解析&#xff08;综合知识、案例分析&#xff09;、历年真题视频解析。 3、官方最新信…

【linux线程(三)】生产者消费者模型详解(多版本)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux线程 1. 前言2. 初识生产…

【数据结构】哈希表与哈希桶

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.概念 2.哈希冲突…

SylixOS工程如何生成map文件

生成.map文件通常是在编译链接阶段由编译器或链接器自动完成的。如果你需要手动生成.map文件&#xff0c;可以通过配置链接器选项来实现。 以bsp工程为例&#xff0c;在内核工程/libsylixos/SylixOS/mktemp/bsp.mk文件中添加-Wl,-Map,output.map选项来生成.map文件。

Java学习笔记:异常处理

Java学习笔记&#xff1a;异常处理 什么是异常异常体系结构&#xff1a;Error、Exception自定义异常 ​ **2024/3/19** 什么是异常 异常体系结构&#xff1a;Error、Exception 自定义异常

Orange3数据预处理(分类器组件)

创建类属性 从字符串属性创建类属性。 输入 数据&#xff1a;输入数据集 输出 数据&#xff1a;具有新类变量的数据集 功能 创建类属性功能从一个已存在的离散或字符串属性中创建一个新的类属性。该组件匹配所选属性的字符串值&#xff0c;并为匹配的实例构造一个新…

Spring Boot:筑基

Spring Boot 前言概述使用 Intellij idea 快速创建 Spring Boot 项目注意事项 前言 在学习 Spring 、SpringMVC 、MyBatis 和 JPA 框架的过程中&#xff0c;了解到 SSM 框架为 Java Web 开发提供了强大的后端支持&#xff0c;JPA 框架则简化了数据库的操作。然而&#xff0c;S…