vue3+ts+vite自适应项目——搭建项目

news2024/11/24 1:40:13

系列文章目录

第一章:搭建项目


目录

系列文章目录

前言

一、搭建项目

二、安装sass

1.安装依赖

2.测试

三、引入element-plus

1.引入库

1.1 安装

2.2引入插件

2.3测试

2.自定义主题

四、实现自适应

1.安装

2.引入

总结


前言

本项目主要目的是熟练vue3和ts的使用,内容大致包括项目搭建、layout布局、自适应、element-plus引入及自定义主题、vue3等相关操作。感兴趣就继续往下看吧~


一、搭建项目

使用vite快速搭建项目,本项目我使用的是yarn ,当然你们也可以选择用npm 或者 cnpm 都可以。

使用以下命令创建项目:

yarn create vite

会提示你选择框架和ui,这里我选择了vue3 和 typescript

此时你的项目创建完成,你只需要进入项目根目录并下载依赖 ,再运行就行啦~

运行后,截图如下:

 恭喜你,项目已经创建完成啦~

当运行完,你可能会看见以下地址:

 network需要在vite.config.ts里面配置server,如下:

再次运行,截图如下:

二、安装sass

1.安装依赖

因为修改element-plus主题需要i使用scss进行覆盖,所以我们先安装sass。安装sass也需要安装它配套的依赖:如:node-sass sass-loader ,执行以下命令安装:

注意:一定要一条一条的执行,因为有可能webpck 版本和sass不兼容

yarn add node-sass
yarn add sass-loader  
yarn add style-loader
yarn add sass

如果出现以下报错,则表示不兼容,安装webpack指定版本就可以啦:

warning " > sass-loader@13.2.2" has unmet peer dependency "webpack@^5.0.0".

2.测试

我们在根目录下创建styles/public.scss,并写入以下变量:

$main_clolr: red;
$main_bg: blue

这里我们打开app.vue,在style标签上加入lang="scss",写入以下内容:

<script setup lang="ts">
</script>

<template>
  
  <div class="item">你好</div>
</template>

<style lang="scss" scoped>
.item{
  background: $main_bg;
  color: $main_clolr;
}
</style>

最后,需要在vite.config.ts里面配置scss,如下:

 代码:

  css: {
    preprocessorOptions: {
      //导入scss全局样式
      scss: {
        additionalData: `@use "./src/styles/public.scss" as *;`,
        // javascriptEnabled: true
      },
    },
  },

此时再运行,可以看见以下页面,则表示引入成功:

三、引入element-plus

vue3对应的ui库是element-plus ,我们接下来就引入它,并且自定义主题。

这里我使用的按需导入,这样可以减少打包体积~

1.引入库

1.1 安装

首先安装element-plus:

yarn add element-plus

再安装按需导入插件:

yarn add  unplugin-vue-components unplugin-auto-import 

2.2引入插件

打开vite.config.ts,加入以下代码:

完整代码如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
//element-plus 按需导入
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// https://vitejs.dev/config/
export default defineConfig({
  plugins:
    [
      vue(),
      //element-plus 按需导入
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),

    ],
  css: {
    preprocessorOptions: {
      //导入scss全局样式
      scss: {
        additionalData: `@use "./src/styles/public.scss" as *;`,
        // javascriptEnabled: true
      },
    },
  },
  server: {
    host: '0.0.0.0'
  }
})

此时已经引入完成,我们来测试一下~

2.3测试

打开app.vue,引入按钮:

    <el-button type="primary">Primary</el-button>

运行出现按钮则表示成功啦~

2.自定义主题

我们接下来自定义elemnet-plus的主题色,尺寸等~ 首先新建styles/element.scss 用以存放 element样式修改文件,在里面输入以下内容:

@forward 'element-plus/theme-chalk/src/common/var.scss' with ($colors: ('primary': ('base': green,
    ),
  ),
);

打开 vite.config.ts 我们需要 修改全局样式路径 和 更改主题样式 ,如下:

 完整代码如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
//element-plus 按需导入
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// https://vitejs.dev/config/
export default defineConfig({
  plugins:
    [
      vue(),
      //element-plus 按需导入
      AutoImport({
        resolvers: [ElementPlusResolver({
          // 自动引入修改主题色添加这一行,使用预处理样式,不添加将会导致使用ElMessage,ElNotification等组件时默认的主题色会覆盖自定义的主题色
          importStyle: "sass",
        }
        )],
      }),
      Components({
        resolvers: [ElementPlusResolver({
          // 自动引入修改主题色添加这一行,使用预处理样式
          importStyle: "sass",
        })],
      }),

    ],
  css: {
    preprocessorOptions: {
      //导入scss全局样式
      scss: {
        additionalData: `@use "./src/styles/element.scss" as *;`,
        // javascriptEnabled: true
      },
    },
  },
  server: {
    host: '0.0.0.0'
  }
})

此时运行代码,可以发现按钮样式变成绿色啦~

 更多得样式修改,可以查看这里~

四、实现自适应

vue2得时候我推荐过使用lib-flexible和postcss-pxtorem实现自适应

vue3我们使用 postcss-plugin-px2remamfe-flexible 实现

1.安装

yarn add postcss-plugin-px2rem
yarn add amfe-flexible

2.引入

在main.ts种引入:

import 'amfe-flexible'

在vite.config.ts中引入:

 完整代码如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
//element-plus 按需导入
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import postcssPluginPx2rem from "postcss-plugin-px2rem"
// https://vitejs.dev/config/
export default defineConfig({
  plugins:
    [
      vue(),
      //element-plus 按需导入
      AutoImport({
        resolvers: [ElementPlusResolver({
          // 自动引入修改主题色添加这一行,使用预处理样式,不添加将会导致使用ElMessage,ElNotification等组件时默认的主题色会覆盖自定义的主题色
          importStyle: "sass",
        }
        )],
      }),
      Components({
        resolvers: [ElementPlusResolver({
          // 自动引入修改主题色添加这一行,使用预处理样式
          importStyle: "sass",
        })],
      }),

    ],
  css: {
    preprocessorOptions: {
      //导入scss全局样式
      scss: {
        additionalData: `@use "./src/styles/element.scss" as *;`,
        // javascriptEnabled: true
      },
    },
    postcss: {
      plugins: [
        postcssPluginPx2rem({
          rootValue: 192, //换算基数, 默认100  ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
          // unitPrecision: 5, //允许REM单位增长到的十进制数字。
          //propWhiteList: [],  //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
          // propBlackList: [], //黑名单
          // exclude: /(node_module)/, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
          // selectorBlackList: [], //要忽略并保留为px的选择器
          // ignoreIdentifier: false,  //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
          // replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
          mediaQuery: false, //(布尔值)允许在媒体查询中转换px。
          minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
        })
      ]
    }
  },
  server: {
    host: '0.0.0.0'
  }
})

此时再运行,可以看到浏览器上的单位变为rem,如下:


总结

好啦,到这里项目已经有了基本架构啦~接下来就是vue3的一些基本操作啦,感兴趣就期待下一章节吧~

源码放在这里啦~有需要自取:https://github.com/tianjing321/vue3-vite-ts-pxtorem

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

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

相关文章

Web前端学习路线 Web前端面试题 Web前端简历及常用工具

文章目录&#xff1a; 一&#xff1a;web前端学习路线 二&#xff1a;web前端常用工具 手册 文档 教程 插件 组件 三&#xff1a;IT计算机web前端面试题和面试需知 一&#xff1a;web前端学习路线 web前端学习路线 二&#xff1a;web前端常用工具 手册 文档 教程 插件 组件 …

浙大数据结构第三周初识二叉树

03-树1 树的同构 (25分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树。而图2就不是同构…

[2023.4.28]知识体系脑图

整理下工作5年来的知识体系脑图&#xff1a;

Vulnhub:DerpNStink 1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.130 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 通过nmap的http-enum脚本发现目标80端口存在wordpress&#xff0c;访问目标网站的wordpress被重定向到http://derpnstink.…

政务智能办体验升级、乳腺癌创新药加速研发,飞桨和文心大模型驱动应用智能涌现...

4月27日&#xff0c;百度“飞桨中国行”落地上海&#xff0c;围绕“如何运用深度学习平台大模型技术打造壁垒快速破局”主题&#xff0c;飞桨携手区域企业、高校院所、硬件厂商、开发者等生态伙伴共话 AI 技术新动向和产业升级新趋势&#xff0c;助力上海夯实具有国际影响力的人…

设计模式 -- 状态模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

系统集成项目管理工程师 笔记(第11章:项目人力资源管理)

文章目录 项目人力资源管理 过程11.2.1 编制项目人力资源计划的工具与技术 375&#xff08;1&#xff09;层次结构图&#xff08;工作、组织、资源 分解结构&#xff09;&#xff08;2&#xff09;矩阵图&#xff08;责任分配矩阵&#xff0c;RAM&#xff09;&#xff08;3&…

KubeSphere 社区双周报 | 杭州站 Meetup 议题征集中 | 2023.04.14-04.27

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.04.14-2023.…

开源+实时+数据即服务的架构——唐建法受邀出席2023数据技术嘉年华【干货回顾】

点击报名 假设原料是一个产品公司的 SaaS 业务系统、一套 CRM、一套工单系统、一个内部人事系统&#xff0c;和内部研发管理系统&#xff1b;现在给到你 40min 的时间&#xff0c;能做出怎样的数据菜肴&#xff1f; 如果这里的厨师是 Tapdata&#xff0c;那么答案可以是一个实时…

【Python】实战:生成多层嵌套笛卡尔积组合问卷 csv《感知觉与沟通评估表》

目录 一、适用场景 二、业务需求 &#xff08;1&#xff09;原产品需求 &#xff08;2&#xff09;需求分析 ① 需求漏洞 ②「0 能力完好」分级标准问题答案组合 ③「1 轻度受损」分级标准问题答案组合 ④「2 中度受损」分级标准问题答案组合 ⑤「3 重度受损」…

Superset安装部署(docker版)

为什么选择使用docker部署superset呢&#xff1f;因为Linux的python环境版本太低&#xff0c;而且一般是不能动系统自带的python环境&#xff0c;大部分都是通过conda或docker的形式创建一个新的python环境 安装yum工具集 yum -y install yum-utils添加docker源至镜像源中 y…

利用chatgpt+低代码技术搭建进销存系统

1 前言 在当今数字化时代&#xff0c;企业管理系统已经成为各行各业不可或缺的一部分。而进销存系统更是企业管理中的重要组成部分&#xff0c;它可以帮助企业实现产品库存管理、采购管理、销售管理等多个方面的自动化管理。 然而&#xff0c;搭建一个高质量的进销存系统需要…

Fiddler抓包工具常见功能介绍,还不会的进来看

目录 Fiddler的功能面板 一、Statistics数据统计面板&#xff0c;性能分析 二、Inspectors查看请求与响应 三、Filters过滤器 1、User Filters启用 2、Action 3、过滤器实际应用 四、AutoResponder请求重定向 1、什么是请求重定向&#xff1f; 2、为什么要用这个功能&…

如何搭建信息存储中心?资源共享方案之搭建ftp个人服务器

serveru是一款由Rob Beckers开发的ftp服务器软件&#xff0c;全称为&#xff1a;serv-u ftp server&#xff0c;它功能强大又易于使用。ftp服务器用户通过ftp协议能在internet上共享文件。FTP协议是专门针对在两个系统之间传输大的文件开发出来的&#xff0c;它是TCP/IP协议的一…

(下)苹果有开源,但又怎样呢?

一开始&#xff0c;因为 MacOS X &#xff0c;苹果与 FreeBSD 过往从密&#xff0c;不仅挖来 FreeBSD 创始人 Jordan Hubbard&#xff0c;更是在此基础上开源了 Darwin。但是&#xff0c;苹果并没有给予 Darwin 太多关注&#xff0c;作为苹果的首个开源项目&#xff0c;它算不上…

【Unity-UGUI控件全面解析】| Canvas 画布组件详解

🎬UGUI控件全面解析 | Canvas 画布组件详解一、组件介绍1.1 绘制元素的顺序二、组件属性面板2.1 Canvas :画布,控制UI的渲染模式2.2 Canvas Scaler:画布缩放器,控制UI画布的放大缩放的比例2.3 Graphic Raycaster:图形射线投射器,控制是否让UI响应射线点击三、代码操作组…

快递账单管理线上化教程

对一家现代化企业来说&#xff0c;快递账单管理怎么做&#xff0c;才能高效不出错&#xff1f;到企业的快递账单管理&#xff0c;其实是伴随着快递行业的发展而改变方式的。 最早的时候&#xff0c;企业快递账单管理&#xff0c;更多的其实是底单管理&#xff0c;早期寄快递&am…

RSA算法仿真模拟

一.密码学 密码学中常见的加密方式可以分为两类&#xff1a;对称加密和非对称加密。 对称加密&#xff1a;对称加密采用相同的密钥来进行加密和解密。因为加密和解密都使用同样的密钥&#xff0c;所以对称加密速度快、效率高&#xff0c;但在密钥管理方面存在困难。常见的对称…

MySQL 精选 35 道面试题大厂稳了(含答案)

MySQL 精选 35 道面试题 1.说一下 MySQL 执行一条查询语句的内部执行过程&#xff1f;2.MySQL 查询缓存有什么优缺点&#xff1f;3.MySQL 的常用引擎都有哪些&#xff1f;4.常用的存储引擎 InnoDB 和 MyISAM 有什么区别&#xff1f;5.什么叫回表查询&#xff1f;6.如果把一个 I…

Grid.js - 跨框架的前端表格插件

只想简简单单画个表格&#xff0c;但 React&#xff0c;Vue&#xff0c;Angular&#xff0c;…&#xff0c;这么多前端框架&#xff0c;各自都有不同的表格渲染库。就没有表格库能“一次画表&#xff0c;到处运行”吗&#xff1f;来看看 Grid.js 这个跨框架的前端表格插件吧&am…