尚硅谷甄选--更新中

news2024/11/21 2:29:41

文章目录

  • 搭建后台管理系统模板
    • 项目初始化
      • 2.1.1环境准备
      • 2.1.2初始化项目
      • 2.2项目配置
        • 一、eslint配置
          • 1.1vue3环境代码校验插件
          • 1.2修改.eslintrc.cjs配置文件
          • 1.3.eslintignore忽略文件
          • 1.4运行脚本
        • 二、配置**prettier**
          • 2.1安装依赖包
          • 2.2.prettierrc.json添加规则
          • 2.3.prettierignore忽略文件
        • 三、配置stylelint
          • 3.1`.stylelintrc.cjs`**配置文件**
          • 3.2.stylelintignore忽略文件
          • 3.3运行脚本
        • 四、配置husky
        • 五、配置commitlint
        • 六、强制使用pnpm包管理器工具
    • 三、项目集成
      • 3.1集成element-plus
      • 3.2src别名的配置
      • 3.3环境变量的配置
      • 3.4SVG图标配置
        • 3.4.1svg封装为全局组件
      • 3.5集成sass

搭建后台管理系统模板

项目初始化

今天来带大家从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范,需要使用eslint+stylelint+prettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来统一包管理工具。

下面我们就用这一套规范来初始化我们的项目,集成一个规范的模版。

2.1.1环境准备

  • node v16.14.2 使用vite必须保证Node版本16+
    node -v查看node版本
  • pnpm 8.0.0

2.1.2初始化项目

本项目使用vite进行构建,vite官方中文文档参考:cn.vitejs.dev/guide/
pnpm:performant npm ,意味“高性能的 npm”。pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”

pnpm安装指令
npm i -g pnpm
使用pnpm创建vite项目 项目初始化命令:
pnpm create vite

Select a framework:: 用什么框架,选vue
Select a variant: 选择语法 TS
在这里插入图片描述
项目初始化完毕,需要运行
cd sgg-vue3 进入项目根目录
pnpm install 项目内部没有node_modules,需要下载安装全部依赖
pnpm run dev 启动
在这里插入图片描述
项目运行在 http://127.0.0.1:5173/,它运行起来不会自动在浏览器端打开
如何自动打开?
项目根目录下package,json文件, 添加在scripts脚本dev运行添加--open即可
在这里插入图片描述

2.2项目配置

一、eslint配置

eslint中文官网:http://eslint.cn/

ESLint最初是由Nicholas C. Zakas 于2013年6月创建的开源项目。它的目标是提供一个插件化的javascript代码检测工具

首先安装eslint
√ How would you like to use ESLint? · 以检查eslint语法并且发现problems发方式使用eslint
√ What type of modules does your project use? · 项目采用什么模块式开发,选择JavsScript modules esm
√ Which framework does your project use? · 使用vue框架开发
√ Does your project use TypeScript? ·使用TS 语法Yes
√ Where does your code run? · 运行在browser,而不是Node端
√ What format do you want your config file to be in? · 配置文件格式是 JavaScript文件
The config that you’ve selected requires the following dependencies:检查语法之类需要安装三个插件,选择yes
这些插件之类选择pnpm 包管理进行下载安装
在这里插入图片描述
项目根目录下会多一个配置文件.eslintrc.cjs,如下

/module.exports = {
   //运行环境配置: 在浏览器端运行,以es2021标准检查语法
    "env": { 
        "browser": true,//浏览器端
        "es2021": true,//es2021
    },
    //规则继承
    "extends": [ 
       //全部规则默认是关闭的,这个配置项开启推荐规则,推荐规则参照文档
       // 开启推荐规则,即eslint推荐的语法,我们都使用
       //比如:函数不能重名、对象不能出现重复key
        "eslint:recommended",
        //vue3语法规则
        "plugin:vue/vue3-essential",
        //ts语法规则
        "plugin:@typescript-eslint/recommended"
    ],
    //要为特定类型的文件指定处理器
    "overrides": [
    ],
    //指定解析器:解析器
    //Esprima 默认解析器
    //Babel-ESLint babel解析器
    //@typescript-eslint/parser ts解析器
    "parser": "@typescript-eslint/parser",
    //指定解析器选项
    "parserOptions": {
        "ecmaVersion": "latest",//校验ECMA最新版本
        "sourceType": "module"//设置为"script"(默认),或者"module"代码在ECMAScript模块中
    },
    //ESLint支持使用第三方插件。在使用插件之前,您必须使用npm安装它
    //该eslint-plugin-前缀可以从插件名称被省略
    "plugins": [
        "vue",
        "@typescript-eslint"
    ],
    //eslint规则
    "rules": {
    }
}
1.1vue3环境代码校验插件

检测vue

# 让所有与prettier规则存在冲突的Eslint rules失效,并使用prettier进行代码检查
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-node": "^11.1.0",
# 运行更漂亮的Eslint,使prettier规则优先级更高,Eslint优先级低
"eslint-plugin-prettier": "^4.2.1",
# vue.js的Eslint插件(查找vue语法错误,发现错误指令,查找违规风格指南
"eslint-plugin-vue": "^9.9.0",
# 该解析器允许使用Eslint校验所有babel code
"@babel/eslint-parser": "^7.19.1",

安装指令
直接复制命令

pnpm install -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier eslint-plugin-node @babel/eslint-parser
1.2修改.eslintrc.cjs配置文件

我们需要对生成的.eslintrc.cjs配置文件进行一些修改

// @see https://eslint.bootcss.com/docs/rules/

module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true,
    jest: true,
  },
  /* 指定如何解析语法 */
  parser: 'vue-eslint-parser',
  /** 优先级低于 parse 的语法解析配置 */
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    parser: '@typescript-eslint/parser',
    jsxPragma: 'React',
    ecmaFeatures: {
      jsx: true,
    },
  },
  /* 继承已有的规则 */
  extends: [
    'eslint:recommended',
    'plugin:vue/vue3-essential',
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  plugins: ['vue', '@typescript-eslint'],
  /*
   * "off" 或 0    ==>  关闭规则
   * "warn" 或 1   ==>  打开的规则作为警告(不影响代码执行)
   * "error" 或 2  ==>  规则作为一个错误(代码不能执行,界面报错)
   */
  rules: {
    // eslint(https://eslint.bootcss.com/docs/rules/)
    'no-var': 'error', // 要求使用 let 或 const 而不是 var
    'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-unexpected-multiline': 'error', // 禁止空余的多行
    'no-useless-escape': 'off', // 禁止不必要的转义字符

    // typeScript (https://typescript-eslint.io/rules)
    '@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
    '@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
    '@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
    '@typescript-eslint/no-non-null-assertion': 'off',
    '@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间。
    '@typescript-eslint/semi': 'off',

    // eslint-plugin-vue (https://eslint.vuejs.org/rules/)
    'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
    'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用
    'vue/no-mutating-props': 'off', // 不允许组件 prop的改变
    'vue/attribute-hyphenation': 'off', // 对模板中的自定义组件强制执行属性命名样式
  },
}

复制过来一堆爆红????因为我自己安装了eslint检查插件,当语法符规范就会爆红,好像不是这个原因
在这里插入图片描述
我的eslint插件禁用后就不会报红,原因现在不清楚,以后在详细探究
在这里插入图片描述

1.3.eslintignore忽略文件

有的文件不需要进行语法检测,根目录下如node_modules依赖文件 项目打包输出的dist文件夹等
项目根目录下新建.eslintignore

dist
node_modules
1.4运行脚本

package.json新增两个运行脚本

"scripts": {
    "lint": "eslint src",
    "fix": "eslint src --fix",
}

解释: 运行pnpm run lint 会检查src下文件
如在main.js用var声明变量就会给出错误, 我还有其他错误,所以多个error
在这里插入图片描述
pnpm run fix 会自动修复,如之前var声明的变成const
在这里插入图片描述

二、配置prettier

有了eslint,为什么还要有prettier?eslint针对的是javascript,他是一个检测工具,包含js语法以及少部分格式问题,在eslint看来,语法对了就能保证代码正常运行,格式问题属于其次;

而prettier属于格式化工具,它看不惯格式不统一,所以它就把eslint没干好的事接着干,另外,prettier支持

包含js在内的多种语言。

总结起来,eslint和prettier这俩兄弟一个保证js代码质量,一个保证代码美观。

2.1安装依赖包
pnpm install -D eslint-plugin-prettier prettier eslint-config-prettier
2.2.prettierrc.json添加规则

“singleQuote”: true, 字符串都是单引号
“semi”: false, 不要分号
缩进两格

{
  "singleQuote": true,
  "semi": false,
  "bracketSpacing": true,
  "htmlWhitespaceSensitivity": "ignore",
  "endOfLine": "auto",
  "trailingComma": "all",
  "tabWidth": 2
}
2.3.prettierignore忽略文件

项目根目录创建·.prettierignore

/dist/*
/html/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*

通过pnpm run lint去检测语法,如果出现不规范格式,通过pnpm run fix 修改
在这里插入图片描述

三、配置stylelint

stylelint为css的lint工具。可格式化css代码,检查css语法错误与不合理的写法,指定css书写顺序等。

我们的项目中使用scss作为预处理器,安装以下依赖:

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
3.1.stylelintrc.cjs配置文件

官网:https://stylelint.bootcss.com/

// @see 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默认样式的时候能使用到
      },
    ],
  },
}
3.2.stylelintignore忽略文件
/node_modules/*
/dist/*
/html/*
/public/*
3.3运行脚本
"scripts": {
	"lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"
}

最后配置统一的prettier来格式化我们的js和css,html代码

 "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"
  },

当我们运行pnpm run format的时候,会把代码直接格式化

四、配置husky

在上面我们已经集成好了我们代码校验工具,但是需要每次手动的去执行命令才会格式化我们的代码。如果有人没有格式化就提交了远程仓库中,那这个规范就没什么用。所以我们需要强制让开发人员按照代码规范来提交。

要做到这件事情,就需要利用husky在代码提交之前触发git hook(git在客户端的钩子),然后执行pnpm run format来自动的格式化我们的代码。

安装husky

pnpm install -D husky

执行

npx husky-init

会在根目录下生成个一个.husky目录,在这个目录下面会有一个pre-commit文件,这个文件里面的命令在我们执行commit的时候就会执行
执行init时出错了,我自己在根目录下新建文件夹.husky
在这里插入图片描述
会在根目录下生成个一个.husky目录,在这个目录下面会有一个pre-commit文件,这个文件里面的命令在我们执行commit的时候就会执行

.husky/pre-commit文件添加如下命令:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm run format

在这里插入图片描述
当我们对代码进行commit操作的时候,就会执行命令,对代码进行格式化,然后再提交。
在这里插入图片描述

五、配置commitlint

对于我们的commit信息,也是有统一规范的,不能随便写,要让每个人都按照统一的标准来执行,我们可以利用commitlint来实现。

安装包

pnpm add @commitlint/config-conventional @commitlint/cli -D

添加配置文件,新建commitlint.config.cjs(注意是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"
  },
}

配置结束,现在当我们填写commit信息的时候,前面就需要带着下面的subject

'feat',//新特性、新功能
'fix',//修改bug
'docs',//文档修改
'style',//代码格式修改, 注意不是 css 修改
'refactor',//代码重构
'perf',//优化相关,比如提升性能、体验
'test',//测试用例修改
'chore',//其他修改, 比如改变构建流程、或者增加依赖库、工具等
'revert',//回滚到上一个版本
'build',//编译相关的修改,例如发布版本、对项目构建或者依赖的改动

配置husky

npx husky add .husky/commit-msg 

在生成的commit-msg文件中添加下面的命令

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm commitlint

在这里插入图片描述

当我们 commit 提交信息时,就不能再随意写了,必须是 git commit -m ‘fix: xxx’ 符合类型的才可以,需要注意的是类型的后面需要用英文的 :,并且冒号后面是需要空一格的,这个是不能省略的
在这里插入图片描述

六、强制使用pnpm包管理器工具

团队开发项目的时候,需要统一包管理器工具,因为不同包管理器工具下载同一个依赖,可能版本不一样,

导致项目出现bug问题,因此包管理器工具需要统一管理!!!

在根目录创建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 ./scripts/preinstall.js"
}

当我们使用npm或者yarn来安装包的时候,就会报错了。原理就是在install的时候会触发preinstall(npm提供的生命周期钩子)这个文件里面的代码。
在这里插入图片描述

三、项目集成

3.1集成element-plus

硅谷甄选运营平台,UI组件库采用的element-plus,因此需要集成element-plus插件!!!

官网地址:
安装图标库

pnpm install element-plus @element-plus/icons-vue

入口文件main.ts全局安装element-plus,element-plus默认支持语言英语设置为中文

import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'
//@ts-ignore忽略当前文件ts类型的检测否则有红色提示(打包会失败)
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
app.use(ElementPlus, {
    locale: zhCn
})

在这里插入图片描述
在这里插入图片描述
解决是:加上//@ts-ignore
代表ts忽略类型检测
在这里插入图片描述

Element Plus全局组件类型声明

// tsconfig.json
{
  "compilerOptions": {
    // ...
    "types": ["element-plus/global"]
  }
}

配置完毕可以测试element-plus组件与图标的使用.

3.2src别名的配置

在开发项目的时候文件与文件关系可能很复杂,因此我们需要给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
        }
    }
})

TypeScript 编译配置

// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录
    "paths": { //路径映射,相对于baseUrl
      "@/*": ["src/*"] 
    }
  }
}

3.3环境变量的配置

项目开发过程中,至少会经历开发环境、测试环境和生产环境(即正式环境)三个阶段。不同阶段请求的状态(如接口地址等)不尽相同,若手动切换接口地址是相当繁琐且易出错的。于是环境变量配置的需求就应运而生,我们只需做简单的配置,把环境状态切换的工作交给代码。

开发环境(development)
顾名思义,开发使用的环境,每位开发人员在自己的dev分支上干活,开发到一定程度,同事会合并代码,进行联调。

测试环境(testing)
测试同事干活的环境啦,一般会由测试同事自己来部署,然后在此环境进行测试

生产环境(production)
生产环境是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。(正式提供给客户使用的环境。)

注意:一般情况下,一个环境对应一台服务器,也有的公司开发与测试环境是一台服务器!!!

项目根目录分别添加 开发、生产和测试环境的文件!

.env.development
.env.production
.env.test

文件内容

# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'development'
VITE_APP_TITLE = '硅谷甄选运营平台'
VITE_APP_BASE_API = '/dev-api'
NODE_ENV = 'production'
VITE_APP_TITLE = '硅谷甄选运营平台'
VITE_APP_BASE_API = '/prod-api'
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'test'
VITE_APP_TITLE = '硅谷甄选运营平台'
VITE_APP_BASE_API = '/test-api'

配置运行命令:package.json

 "scripts": {
    "dev": "vite --open",
    "build:test": "vue-tsc && vite build --mode test",
    "build:pro": "vue-tsc && vite build --mode production",
    "preview": "vite preview"
  },

通过import.meta.env获取环境变量
在这里插入图片描述

3.4SVG图标配置

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后,页面上加载的不再是图片资源,

这对页面性能来说是个很大的提升,而且我们SVG文件比img要小的很多,放在项目中几乎不占用资源。

安装SVG依赖插件

pnpm install vite-plugin-svg-icons -D

vite.config.ts中配置插件

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    createSvgIconsPlugin({
      // Specify the icon folder to be cached 以后矢量图标就放在src/assets/icons
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
      // Specify symbolId format
      symbolId: 'icon-[dir]-[name]',
    }),
  ],
  resolve: {
    alias: {
      '@': path.resolve('./src'), // // 相对路径别名配置,使用 @ 代替 src
    },
  },
})

入口文件导入

import 'virtual:svg-icons-register'

】选择图标
在这里插入图片描述
在这里插入图片描述
新建xxx.svg文件,粘贴svg代码
在这里插入图片描述
我们在app.vue中测试使用

  <div>
    <!-- svg 图标外侧容器节点 内部需要与use标签结合使用 -->
    <!-- xlink决定使用哪一个图标, 必须以#icon开始后面接src/assets/图标 -->
    <!-- style指定大小 fill指定颜色 -->
   <svg style="width: 130px; height: 130px;">
    <use xlink:href="#icon-sun" fill="#f4ea2a"></use>
   </svg>
  </div>

我的颜色指定失败,还不知道为什么???
在这里插入图片描述

3.4.1svg封装为全局组件

因为项目很多模块需要使用图标,因此把它封装为全局组件!!!

在src/components目录下创建一个SvgIcon组件:代表如下

<template>
  <div>
    <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>

main.ts引入注册

import SvgIcon from '@/components/SvgIcon/index.vue';
app.component('SvgIcon', SvgIcon)

但是如果我们的插件特别多,需要这样引入注册很多次,因此下面使用插件
在src\components文件夹目录下创建一个index.ts文件:用于注册components文件夹内部全部全局组件!!!

// 引入需要注册为全局的组件
import SvgIcon from './SvgIcon/index.vue';
import type { App, Component } from 'vue';
// 定义一个对象,属性是字符串,属性值是组件
const components: { [name: string]: Component } = { SvgIcon };
export default {
    install(app: App) {
        // 遍历对象,进行注册组件
        Object.keys(components).forEach((key: string) => {
            app.component(key, components[key]);
        })
    }
}

在入口文件引入src/index.ts文件,通过app.use方法安装自定义插件

import gloablComponent from './components/index';
app.use(gloablComponent);

在这里插入图片描述

3.5集成sass

我们目前在组件内部已经可以使用scss样式,因为在配置styleLint工具的时候,项目当中已经安装过sass sass-loader,因此我们再组件内可以使用scss语法!!!需要加上lang=“scss”

<style scoped lang="scss"></style>

接下来我们为项目添加一些全局的样式

在src/styles目录下创建一个index.scss文件,当然项目中需要用到清除默认样式,因此在index.scss引入reset.scss,

@import reset.scss

reset.scss中的代码是下图的code中,去该网站粘贴即可
在这里插入图片描述

在入口文件引入

import '@/styles'

但是你会发现在src/styles/index.scss全局样式文件中没有办法使用$变量.因此需要给项目中引入全局变量$.

在style/variable.scss创建一个variable.scss文件!

在vite.config.ts文件配置如下:

export default defineConfig((config) => {
 // scss全局变量配置 全局变量配置在/variable.scss
	css: {
      preprocessorOptions: {
        scss: {
          javascriptEnabled: true,
          additionalData: '@import "./src/styles/variable.scss";',
        },
      },
    },
	}
}

@import "./src/styles/variable.less";后面的;不要忘记,不然会报错!

配置完毕你会发现scss提供这些全局变量可以在组件样式中使用了!!!

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

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

相关文章

Shell编程条件语句(if、case)

目录 一、Shell条件语句 1.条件表达式测试 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二、if 条件语句&#xff08;串行执行&#xff09; &#xff08;1&#xff09;单分支结构 &#xff08;2&#xff09;双分支结构 &#xff08;3&#xff09;多分支结构 三…

C语言之数据在内存中的存储习题讲解

上个博客我们讲到了整型家族,对于整型家族来说有有符号和无符号之分 short signed short unsigned short int signed int unsigned int char在VS环境上其实是signed char unsigned char 对于有符号的char来说,把二进制位序列中的最高位当成符号位 对于无符号的char来…

【计算机组成原理与体系结构】控制器

目录 一、CPU的功能与基本结构 二、指令周期的数据流 三、数据通路 四、硬布线控制器 五、微程序控制器 六、微指令 一、CPU的功能与基本结构 运算器基本结构 控制器基本结构 CPU的基本结构 二、指令周期的数据流 取址周期 间址周期 中断周期 指令周期流程 三、数据通路 …

微信云开发

微信云数据库 快速开始&#xff1a;小程序/小游戏 | 微信开放文档 (qq.com) 首先微信云开发需要一个真实小程序的 AppID&#xff0c;而不能使用测试号。 然后点击这个开通云开发 云的环境大概是这样的 首先我们要初始化 否则会像这样&#xff0c;报错 写在app.js的 onLaunc…

LearnOpenGL-高级OpenGL-11.抗锯齿

本人初学者&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 文章目录 抗锯齿多重采样锯齿产生原因多重采样方式 OpenGL的MSAA例子&#xff1a;提示GLFW离屏MSAA例子1&#xff1a;多重采样帧缓冲传送到屏幕上例子2&#xff1a;采样多重采样帧缓冲的纹理缓冲与后期效果…

【华为OD统一考试B卷 | 100分】太阳能板最大面积(C++ Java JavaScript Python)

题目描述 给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要先安装两个支柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。 但航天器不同位置的支柱长度不同,太阳能板的安装面积受限于最短一侧的那根支柱长度。如图: 现提供一组整形数组的支柱高…

chatgpt赋能python:如何升级你的Python到最新版本

如何升级你的Python到最新版本 Python作为一种强大的编程语言&#xff0c;拥有广泛的用途&#xff0c;从网站开发到数据科学&#xff0c;都可以使用它来实现。然而&#xff0c;Python不断更新&#xff0c;每个新版本都带来了新的功能和改进&#xff0c;因此升级Python到最新版…

二叉树概念(二)

平衡二叉树 AVL树(Adelson-Velsky 和 Landis) 左子树和右子树的高度之差的绝对值小于等于1 C++ 中,可以直接使用 std::set 类作为平衡二叉树;Java 中,可以直接使用 TreeSet。在 Python 中,没有内置的库可以用来模拟平衡二叉树。 力扣 红黑树 (Red-Black Tree) 是一种二…

Shell脚本数组简介及运用

目录 一、数组简介 二、数组支持的数据类型 三、定义数组 四、获取数组某个索引处的值 五、遍历数组元素 六、获取数组长度 七、截取数组元素 八、数组的元素替换 1.临时替换 2.永久替换 九、删除元素或数组 十、数组追加元素 1.满元素数组追加 2.非满元素数组追…

【模块三:职业成长】39|能力维度四:如何从做技术到为企业创造生存优势?

你好&#xff0c;我是郭东白。今天这节课是架构师能力维度的第四部分&#xff0c;我们来继续探索架构师成长过程的能力跃迁。不过今天我们会连续讲两个跃迁&#xff1a;从跨域架构师到总架构师&#xff08;首席架构师&#xff09;的跃迁&#xff1b;从总架构师再到 CTO 的跃迁。…

浅尝 xen 虚拟化

前言 之前分享过使用 oVirt 部署私有虚拟化环境, oVirt 是基于 KVM 虚拟化开发了一系列的管理工具, 以 Web Console /CLI 的方式交付使用. 今天记录和分享的是在 VMware Workstation 中使用 Alpine 作为基础操作系统部署 xen 虚拟化环境的简单测试. xen 基本概念 xen 可以理…

chatgpt赋能python:Python的发音

Python的发音 Python是一种广泛使用的编程语言&#xff0c;用于web开发、数据分析、科学计算等众多领域。然而&#xff0c;Python这个词汇的发音在不同的地方却存在差异。在本文中&#xff0c;我们将介绍Python的发音&#xff0c;解决大家的困惑。 发音方式 Python在英语中常…

【数学建模系列】TOPSIS法的算法步骤及实战应用——MATLAB实现

文章目录 TOPSIS简介方法和原理数学定义数学语言描述现实案例 正负理想解定义实例 量纲 TOPSIS法的算法步骤1.用向量规范化的方法求得规范决策矩阵2.构成加权规范阵C(c~ij~)~m*n~3.确定正负理想解的距离4.计算各方案到正理想解与负理想解的距离5.计算各方案的综合评价指数6.排列…

STM32源码阅读记录之HAL库(SystemTick)

问题 HAL_Delay是怎么做到可以延迟控制的? 分析记录 步骤01&#xff1a;看函数本身 void HAL_Delay(uint32_t Delay); /*** brief 此函数根据变量递增提供最小延迟&#xff08;以毫秒为单位&#xff09;。* note 在默认的实现中&#xff0c;SysTick计时器是时基的来源。它用…

【Leetcode -225.用队列实现栈 -232.用栈实现队列】

Leetcode Leetcode -225.用队列实现栈Leetcode -232.用栈实现队列 Leetcode -225.用队列实现栈 题目&#xff1a;仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 …

chatgpt赋能python:Python实践:如何升级pip

Python实践&#xff1a;如何升级pip Python作为一门高效的脚本语言&#xff0c;被广泛应用于数据分析、人工智能、Web开发等领域。而pip则是Python的包管理工具&#xff0c;是开发Python应用的必备工具。但是pip在使用过程中&#xff0c;有时候会出现版本不兼容或者出现漏洞等…

chatgpt赋能python:Python取两位小数的方法

Python取两位小数的方法 介绍 Python是一种高级编程语言&#xff0c;因其简洁易懂、跨平台等特点&#xff0c;被广泛应用于科学计算、数据分析、网站开发、人工智能等领域。在编写Python程序时&#xff0c;我们经常需要将浮点数精确到小数点后几位&#xff0c;比如精确到两位…

【0基础教程】Javascript 里的分组正则Capturing Groups使用方法及原理

一、从最简单开始 现有一个字符串&#xff1a; “1-apple” 需要提取出 1 和 apple 来&#xff0c;对应的正则表达式很简单&#xff1a; ^(\d)-(.)$ 对应的代码也比较简单&#xff1a; const str "1-apple"const regexp /^(\d)-(.)$/let match regexp.exec(str)c…

chatgpt赋能python:Python如何升序输出?从入门到实践!

Python如何升序输出&#xff1f;从入门到实践&#xff01; 作为一门高级编程语言&#xff0c;Python是目前应用广泛且最为流行的一门语言之一。它逐渐成为开发者的首选语言&#xff0c;因为它易学易用&#xff0c;可读性强&#xff0c;支持多种编程范式&#xff0c;提供了强大…

chatgpt赋能python:如何升级Python的pip版本

如何升级Python的pip版本 如果你使用Python来进行程序开发&#xff0c;那么你一定需要用到pip&#xff0c;它是Python的包管理器&#xff0c;用于安装和管理各种Python库。 不过&#xff0c;一旦你开始使用pip&#xff0c;你可能会遇到一个问题&#xff1a;你的pip版本可能会…