做网站加手机app需要多少钱/seo论坛
Vite 官网:https://cn.vitejs.dev/
Vue 官网:https://vuejs.org/
Vue 官方文档:https://cn.vuejs.org/guide/introduction.html
Element Plus 官网:https://element-plus.org/
Tailwind CSS 官网:https://tailwindcss.com/
Tailwind CSS 中文文档 (73zls.com):https://tailwind.docs.73zls.com/docs/responsive-design
NPM 官网:https://www.npmjs.com/
Vite 官方中文文档:https://cn.vitejs.dev/
安装 Node 环境
首先,确保已经安装了 Node.js,可以在命令行中运行 node -v
和 npm -v
来检查它们是否已经正确安装:
安装 Node.js 通常会自动附带安装 npm,所以你不需要单独安装 npm。只需确保 Node.js 版本符合要求即可。
切换 NPM 镜像源
使用 nrm
来管理 npm 镜像源可以帮助加速 npm 包的下载速度。
-
执行命令通过 npm 全局安装
nrm
:npm install -g nrm
-
使用
nrm ls
命令列出当前可用的镜像源,以及它们的地址和当前使用的镜像源:nrm ls
-
使用
nrm use
命令来切换想要使用的镜像源,例如,切换到淘宝镜像源:nrm use taobao
-
使用以下命令来验证切换是否成功:
npm config get registry
安装 Pnpm 包管理工具
-
在命令行中执行以下命令全局安装 pnpm:
npm install -g pnpm
-
安装完成后,可以使用 pnpm 来代替 npm 进行包管理。例如,使用以下命令来安装项目依赖:
pnpm install
这将使用 pnpm 来安装项目所需的包,而不是使用默认的 npm。
使用 Vue 官方脚手架初始化项目
-
切换到打算创建项目的目录,输入
cmd
打开命令行,之后在命令行中运行以下命令:pnpm create vue@latest
-
运行命令后使用方向键和回车键选择【否/是】开启或关闭某个功能:
-
创建完项目之后,在命令行中继续输入以下命令运行项目:
cd <your-project-name> pnpm i pnpm run dev --open
认识 Vue 项目目录结构
Vue 3 项目的典型目录结构如下:
project-name/
├── public/ # 静态资源目录
│ └── favicon.ico # 网站图标
├── src/ # 源代码目录
│ ├── assets/ # 资源文件目录(图片、样式等)
│ ├── components/ # 组件目录
│ │ └── HelloWorld.vue # 示例组件
│ ├── router/ # 路由配置目录
│ │ └── index.ts # 路由配置文件
│ ├── store/ # 状态管理目录
│ │ └── index.ts # 状态管理配置文件(Pinia)
│ ├── views/ # 视图目录
│ │ └── Home.vue # 示例视图组件
│ ├── App.vue # 根组件
│ └── main.ts # 项目入口文件(使用 TypeScript)
├── .eslintrc.js # ESLint 配置文件
├── .gitignore # Git 忽略文件配置
├── .prettierrc.json # Prettier 配置文件
├── env.d.ts # 声明文件,用于声明全局环境变量的类型
├── index.html # 入口 HTML 文件
├── package.json # 项目配置文件
├── README.md # 项目说明文件
├── tsconfig.json # TypeScript 配置文件
└── vite.config.js # Vite 配置文件
统一包管理器工具下载依赖
-
创建
scripts\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) }
-
在 package.json 中配置命令:
"scripts": {"preinstall":"node ./scripts/preinstall.js" }
preinstall
是 npm 提供的生命周期钩子,当我们使用 yarn 或 npm 来安装依赖的时候就会触发preinstall
。
项目环境变量配置
没有基础的同学可以先去阅读下环境变量的文章:认识和使用 Vite 环境变量配置
-
在项目根目录(
index.html
文件所在的位置)下创建对应环境的.env
文件,然后在文件中定义对应环境下的变量,默认情况下只有以VITE_
为前缀的变量才会暴露给 Vite:-
.env
【默认配置】:# 项目标题 VITE_APP_TITLE = OCTOPUS# 运行端口号 VITE_PORT = 8080
-
.env.development
【开发环境】:# 开发环境 VITE_USER_NODE_ENV = development# 项目基本 URL VITE_BASE_URL = /dev/# 启动时自动打开浏览器 VITE_OPEN = true
-
.env.production
【生产环境】:# 生产环境 VITE_USER_NODE_ENV = production# 项目基本 URL VITE_BASE_URL = /
-
.env.test
【测试环境】:# 测试环境 VITE_USER_NODE_ENV = test# 项目基本 URL VITE_BASE_URL = /test/
-
-
创建
src\types\global.d.ts
文件声明环境变量类型:// 定义泛型 Recordable,键类型为字符串、值类型为 T declare type Recordable<T = any> = Record<string, T>// 定义接口 ViteEnv,描述项目的环境变量结构 declare interface ViteEnv {VITE_USER_NODE_ENV: 'development' | 'production' | 'test' // 当前运行环境,可选值为 'development', 'production' 或 'test'VITE_GLOB_APP_TITLE: string // 应用标题VITE_PORT: number // Vite 端口号VITE_OPEN: boolean // 是否自动在浏览器打开应用VITE_REPORT: boolean // 是否开启 report 功能VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'gzip,brotli' | 'none' // 可选值为 'gzip', 'brotli', 'gzip,brotli' 或 'none'VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean // 是否删除原始文件VITE_DROP_CONSOLE: boolean // 是否删除控制台VITE_BASE_URL: string // 基本 URLVITE_API_URL: string // API 地址VITE_PROXY: [string, string][] // 表示代理配置VITE_USE_IMAGEMIN: boolean // 是否使用图像压缩 }
-
创建
build\getEnv.ts
文件用于完成环境变量类型转换:/*** 从 Vite 的环境变量对象中读取值并进行类型转换* @param envConf 原始环境变量配置对象* @returns ViteEnv 适用于 Vite 的环境变量对象*/ export function wrapperEnv(envConf: Recordable): ViteEnv {// 创建一个空对象,用于存储处理后的环境变量const ret: any = {}// 遍历环境变量对象的键for (const envName of Object.keys(envConf)) {// 将环境变量值中的 '\n' 替换为换行符 '\n'let realName = envConf[envName].replace(/\\n/g, '\n')realName = realName === 'true' ? true : realName === 'false' ? false : realNameif (envName === 'VITE_PORT') realName = Number(realName)if (envName === 'VITE_PROXY') {try {realName = JSON.parse(realName)} catch (error) {// ignore}}ret[envName] = realName}return ret }
-
在
tsconfig.json
中添加 TypeScript 编译器配置:{"include": ["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue","build/**/*.ts","build/**/*.d.ts","vite.config.ts"],"exclude": ["node_modules", "dist", "**/*.js"] }
-
在
vite.config.ts
中获取环境变量,并修改 Vite 启动配置:import { defineConfig, loadEnv, ConfigEnv, UserConfig } from 'vite' import { wrapperEnv } from './build/getEnv'// https://vitejs.dev/config/ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {const root = process.cwd()// 获取.env文件中的内容const env = loadEnv(mode, root)const viteEnv = wrapperEnv(env)return {root, //项目根目录base: viteEnv.VITE_BASE_URL, //基础 URLserver: {host: '0.0.0.0', //指定服务器主机地址port: viteEnv.VITE_PORT, //指定开发服务器端口strictPort: true, //若端口已被占用则会直接退出open: viteEnv.VITE_OPEN //服务器启动时,自动在浏览器中打开应用程序}} })
-
在项目中使用 Vite 提供的
import.meta.env
对象获取这些环境变量:<script setup lang="ts"> const title = import.meta.env.VITE_APP_TITLE </script><template><h1>{{ title }}</h1> </template>
安装 Element Plus
-
使用包管理器 pnpm 安装 Element Plus:
pnpm install element-plus
-
在
main.ts
文件中引入 Element Plus:import { createApp } from 'vue' 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')
-
设置 Element Plus 默认语言为中文:
import ElementPlus from 'element-plus' import zhCn from 'element-plus/es/locale/lang/zh-cn'app.use(ElementPlus, {locale: zhCn, })
-
在
tsconfig.json
中通过compilerOptions.type
指定全局组件类型:{"compilerOptions": {// ..."types": ["element-plus/global"]} }
-
在
App.vue
中添加 Element Plus 按钮组件:<template><div class="mb-4"><el-button>Default</el-button><el-button type="primary">Primary</el-button><el-button type="success">Success</el-button><el-button type="info">Info</el-button><el-button type="warning">Warning</el-button><el-button type="danger">Danger</el-button></div> </template>
-
执行命令启动项目:
pnpm run dev
集成 sass 配置全局变量
-
通过以下命令安装
sass
:pnpm add sass
-
创建
src\assets\styles\variable.scss
全局变量文件://全局scss变量 $color:red
-
在
vite.config.ts
中使用additionalData
引入全局的 Sass 变量文件:export default defineConfig({css: {preprocessorOptions: {scss: {javaScriptEnabled: true,// 向全局 scss 文件内容注入变量additionalData: `@import "@/assets/styles/variable.scss";`}}} })
-
在 Vue 组件中使用变量:
<script setup lang="ts"> // This starter template is using Vue 3 <script setup> SFCs </script><template><div><h1>Hello world!</h1></div> </template><style scoped lang="scss"> /* SCSS */ div {font: 2em sans-serif;h1 {color: $color;} } </style>
-
执行命令启动项目:
pnpm run dev
清除默认样式
通常,浏览器会对一些 HTML 元素应用一些默认的样式,但这些默认样式在不同浏览器之间可能存在差异,导致页面在不同浏览器中呈现不一致。
清除默认样式可以将所有元素的样式重置为统一的基础样式,然后再根据需要逐个重新定义。这样可以确保在编写样式时,不会受到浏览器默认样式的影响,从而更容易实现跨浏览器的一致性。
-
进入 NPM 官网:https://www.npmjs.com/,搜索 reset.scss,复制即可:
-
创建
src\assets\styles\reset.scss
文件,添加样式:*, *:after, *:before {box-sizing: border-box;outline: none; }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, menu, nav, output, ruby, section, summary, time, mark, audio, video {font: inherit;font-size: 100%;margin: 0;padding: 0;vertical-align: baseline;border: 0; }article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {display: block; }body {line-height: 1; }ol, ul {list-style: none; }blockquote, q {quotes: none;&:before,&:after {content: '';content: none;} }sub, sup {font-size: 75%;line-height: 0;position: relative;vertical-align: baseline; }sup {top: -.5em; }sub {bottom: -.25em; }table {border-spacing: 0;border-collapse: collapse; }input, textarea, button {font-family: inhert;font-size: inherit;color: inherit; }select {text-indent: .01px;text-overflow: '';border: 0;border-radius: 0;-webkit-appearance: none;-moz-appearance: none; }select::-ms-expand {display: none; }code, pre {font-family: monospace, monospace;font-size: 1em; }
-
创建
src\assets\styles\index.scss
文件,用于统一管理和维护项目的样式文件:@import './reset.scss';
-
在
main.ts
文件中引入index.scss
样式文件:import './assets/styles/index.scss'
安装 Tailwind CSS
-
打开 Tailwind CSS 官网【https://tailwindcss.com/】,点击【Docs】查看文档:
-
点击【Framework Guides】查看框架指南,我们的项目是使用 Vite 构建,所以点击【Vite】:
-
点击【Using Vue】查看安装步骤:
-
执行命令安装 Tailwind CSS:
pnpm i -D tailwindcss postcss autoprefixer
-
运行命令生成 Tailwind CSS 配置文件:
tailwind.config.js、postcss.config.js
npx tailwindcss init -p
-
在
tailwind.config.js
配置文件中添加模板文件路径:content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}']
-
创建
src\assets\styles\tailwind.scss
文件, 添加 Tailwind CSS 提供的用于导入基础样式、组件和实用工具的特殊指令:@tailwind base; @tailwind components; @tailwind utilities;
-
在
src\assets\styles\index.scss
文件引入tailwind.scss
,或者在main.ts
文件中直接引入:@import './tailwind.scss';
-
在项目中使用 Tailwind.css 设置内容样式:
<template><h1 class="text-3xl font-bold underline">Hello world!</h1> </template>
-
执行命令启动项目:
pnpm run dev
相关文章:

使用 Vue 官方脚手架初始化 Vue3 项目
Vite 官网:https://cn.vitejs.dev/ Vue 官网:https://vuejs.org/ Vue 官方文档:https://cn.vuejs.org/guide/introduction.html Element Plus 官网:https://element-plus.org/ Tailwind CSS 官网:https://tailwindcss.…...

C语言中的宏定义(#define)和函数调用的区别
C语言中的宏定义(#define)和函数调用在概念、工作方式以及它们对代码的影响上有显著的区别。以下是它们之间的主要差异: 宏定义(#define) 工作方式:宏定义是在预处理阶段进行的文本替换。预处理器会在编译…...

196. 删除重复的电子邮箱
196. 删除重复的电子邮箱 题目链接:196. 删除重复的电子邮箱 代码如下: # Write your MySQL query statement below delete from Person as p where p.id not in(select e.id from (select min(id) as idfrom Person group by email ) as e )...

Android 大话binder通信 (上)
戳蓝字“牛晓伟”关注我哦! 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 本文摘要 用故事的方式把binder通信的整个过程都描述出来,binder通信都经历了哪些节点,在这些节点上的数据有哪些变化,同时还对binder通…...

DevOps学习回顾01-技能发展路线-岗位能力-体系认知
事为先,人为重–事在人为 参考来源: 极客时间专栏:DevOps实战笔记,作者:石雪峰 课程链接:https://time.geekbang.org/column/intro/235 时代的典型特征 VUCA VUCA 是指易变性(Volatility&…...

【MySQL】复合查询和内外连接
文章目录 MySQL复合查询和内外连接1. 复合查询1.1 多表查询1.2 自连接1.3 子查询单行子查询多行子查询多列子查询from中使用子查询合并查询 2. 内外连接1. INNER JOIN2. LEFT JOIN3. RIGHT JOIN4. FULL JOIN5. CROSS JOIN MySQL复合查询和内外连接 1. 复合查询 1.1 多表查询 …...

【星海随笔】云解决方案学习日志篇(二) kafka、Zookeeper、Fielbeat
Elastic 中国社区官方博客 https://blog.csdn.net/ubuntutouch/category_9209092.html Kafka kafka的源代码是基于Scala语言编写的,运行在Java虚拟机(即:JVM)上。因此,在安装kafka之前需要先安装JDK Kafka 为什么依赖 Zookeepe…...

【测试专题】系统测试报告(原件Word)
软件测试报告在软件开发过程中起着至关重要的作用,主要有以下几个主要原因: 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…...

C++中的模板方法模式
目录 模板方法模式(Template Method Pattern) 实际应用 数据处理流程 在线教育系统的课程模板 软件开发生命周期 总结 模板方法模式(Template Method Pattern) 模板方法模式是一种行为设计模式,它定义了一个操作…...

【数据结构】第十七弹---C语言实现选择排序
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、选择排序 1.1、基本思想 1.2、代码实现 1.3、代码测试 1.4、时空复杂度分析 总结 1、选择排序 1.1、基本思想 选择排序是一种简单直观的比…...

信号处理中的梯型权重操作(Tapering)
目录 1. 引言2. 一个Tapering操作的例子3. Tapering操作的简单实现延伸阅读1. 引言 Tapering 操作是对信号数据在水平和垂直方向上应用梯形权重,这个操作可以减弱数据边界效应,从而在进行傅里叶变换时减少伪影和边缘效应。本文将通过一个简单的例子来展示 Tapering 操作的具…...

深入解析分布式链路追踪:原理、技术及应用
目录 分布式链路追踪简介分布式链路追踪的基本概念 Span 和 Trace上下文传播采样策略 分布式链路追踪的工作原理常见的分布式链路追踪系统 ZipkinJaegerOpenTelemetry 分布式链路追踪的技术实现 数据收集数据传输数据存储数据展示 分布式链路追踪的应用场景 性能优化故障排除依…...

2024信息系统、信号处理与通信技术国际会议(ICISPCT2024)
2024信息系统、信号处理与通信技术国际会议(ICISPCT2024) 会议简介 2024国际信息系统、信号处理与通信技术大会(ICISPCT2024)将在青岛隆重开幕。本次会议旨在汇聚全球信息系统、信号处理和通信技术领域的专家学者,共同探索行业…...

用这个神级提示词插件,能让你的AI绘画工具Stable diffusion提示词直接写中文!
大家好,我是设计师阿威 最近,有同学在使用AI绘画工具 Stable Diffusion的时候和我说:老师,我英文不好,能不能直接让我写中文提示词啊?最好可以直接在SD的输入框就能直接写中文,不用切换网页或者…...

Android里的设计模式
一:设计模式分类 经典的23种设计模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(合称“Gang of Four”)在他们的书《设计模式:可复用面向对象软件的基础》中定义的。以下是这些设计模式的分类和简要介绍。 1.…...

token无感刷新
Token无感刷新通常指的是在用户不知情的情况下自动刷新认证Token,以保持用户的会话状态。这通常在使用JWT(JSON Web Tokens)作为认证方式时使用。以下是实现无感刷新的一种常见方法: 1. 前端请求拦截: 在发送请求前&a…...

Golang的协程调度器GMP
目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器,它包含了运行协程的资源,如果线程想运行协程,必须先获取P,P中还包含了可运行的G…...

C++ 后端,Vue前端
参考2篇博客 1-VUE、C前后端调用 2-Vue解决CORS header ‘Access-Control-Allow-Origin’ missing及同源、跨域问题 这里给出App.vue代码 <script setup lang"ts"> import HelloWorld from ./components/HelloWorld.vueimport axios from axios import { ref…...

使用Navicat Premium向mysql插入2000000条数据
DELIMITER // DROP PROCEDURE IF EXISTS sys_log; CREATE PROCEDURE sys_log() BEGIN DECLARE n int DEFAULT 1; WHILE(n<2000000) DO INSERT INTO sys_log VALUES (n, 超级系统管理员, 查询实时工况数据, /keyParameterMonitoring/getNewestUnitData, {\"role\"…...

docker命令记录
基本命令和参数 docker run: 运行一个新的容器实例。-itd: 组合参数,含义如下: -i: 以交互模式运行容器,保持标准输入打开。-t: 分配一个伪终端。-d: 后台运行容器,即使容器启动后依然返回控制台。 设备映射 --device/dev/dri…...

Java学习七
Java包 String对象 String案例 集合 ArrayList 集合...

麒麟Kylin | 操作系统的安装与管理
以下所使用的环境为:VMware Workstation 17 Pro、Kylin-Server-10-SP2-x86-Release-Build09-20210524 一、创建虚拟机 在VMware主机单击【创建新的虚拟机】 **在新建虚拟机向导中选择【自定义】,然后点击【下一步】 ** 保持默认选项,然后…...

数据结构预备知识(Java):包装类泛型
1、包装类 1.1 包装类 在Java中,每一个基本数据类型都有一个对应的包装类: 在SE的学习中我们已有过简单了解。 我们可以注意到,除了int类型的包装类为Integer,char类型的包装类为Character外,其余基本类型的包装类均…...

掌握Linux Vim:从基础到高级的全面指南
Vim是一款在Linux世界中备受推崇的文本编辑器,它以其强大的功能和高效的操作模式闻名于世。尽管Vim的学习曲线较陡,但一旦掌握,你将发现它在代码编辑和文本处理方面的无与伦比的优势。本文将从Vim的基础知识开始,逐步深入到高级用法和技巧,帮助你全面掌握这款强大的编辑器…...

打好“组合拳”,实现国有企业降本增效
在当前经济不确定性加剧、市场寒意明显的背景下,众多国有企业因历史积累的管理问题而陷入困境。随着经济形势的严峻,各行业普遍出现发展乏力的现象,促使企业开始重视“修炼内功”、“向内挖潜”,试图控制成本,以确保平…...

四川古力未来科技有限公司抖音小店解锁电商新机遇
在数字化浪潮席卷全球的今天,电商行业正以前所未有的速度蓬勃发展。四川古力未来科技有限公司紧跟时代步伐,积极拥抱变革,在抖音平台上开设小店,为品牌发展注入了新的活力。那么,四川古力未来科技有限公司抖音小店究竟…...

Maven之介绍
目录 一、简介 (2)为什么学习Maven? 二、小结 一、简介 (1)Maven 是一个 Java 项目管理和构建工具。它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具…...

简单了解java中的File类
1、File类 1.1、概述 File对象就表示一个路径,可以是文件路径也可以是文件夹路径,这个路径可以 是存在的,也可以是不存在的。 1.2、常见的构造方法 方法名称说明public File(String pathname)根据文件路径创建文件…...

边缘检测(一)-灰度图像边缘检测方法
灰度图像边缘检测是数字图像处理与机器视觉中经常遇到的一个问题,边缘检测是否连续、光滑是判断检测方法优劣的一个重要标准,下面通过一个实例提供灰度图像边缘检测方法,该方法对其他图像检测也具有一定的参考价值。 首先,读入一幅…...

2025计算机毕业设计选题题目推荐-毕设题目汇总大全
选题在于精,以下是推荐的容易答辩的选题: SpringBoot Vue选题: 基于SpringBoot Vue家政服务系统 基于SpringBoot Vue非物质文化遗产数字化传承 基于SpringBoot Vue兽医站管理系统 基于SpringBoot Vue毕业设计选题管理系统 基于SpringBoot Vue灾害应急救援…...