使用 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.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 -vnpm -v 来检查它们是否已经正确安装:

image-20231210121140490

安装 Node.js 通常会自动附带安装 npm,所以你不需要单独安装 npm。只需确保 Node.js 版本符合要求即可。

切换 NPM 镜像源

使用 nrm 来管理 npm 镜像源可以帮助加速 npm 包的下载速度。

  1. 执行命令通过 npm 全局安装 nrm

    npm install -g nrm
    
  2. 使用 nrm ls 命令列出当前可用的镜像源,以及它们的地址和当前使用的镜像源:

    nrm ls
    
  3. 使用 nrm use 命令来切换想要使用的镜像源,例如,切换到淘宝镜像源:

    nrm use taobao
    
  4. 使用以下命令来验证切换是否成功:

    npm config get registry
    

安装 Pnpm 包管理工具

  1. 在命令行中执行以下命令全局安装 pnpm:

    npm install -g pnpm
    
  2. 安装完成后,可以使用 pnpm 来代替 npm 进行包管理。例如,使用以下命令来安装项目依赖:

    pnpm install
    

    这将使用 pnpm 来安装项目所需的包,而不是使用默认的 npm。

使用 Vue 官方脚手架初始化项目

  1. 切换到打算创建项目的目录,输入 cmd 打开命令行,之后在命令行中运行以下命令:

    pnpm create vue@latest
    
  2. 运行命令后使用方向键和回车键选择【否/是】开启或关闭某个功能:

    test

  3. 创建完项目之后,在命令行中继续输入以下命令运行项目:

    cd <your-project-name>
    pnpm i
    pnpm run dev --open
    

    test-1

认识 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 配置文件

统一包管理器工具下载依赖

  1. 创建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)
    }
    
  2. 在 package.json 中配置命令:

    "scripts": {
        "preinstall":"node ./scripts/preinstall.js"
    }
    

    preinstall是 npm 提供的生命周期钩子,当我们使用 yarn 或 npm 来安装依赖的时候就会触发 preinstall

项目环境变量配置

没有基础的同学可以先去阅读下环境变量的文章:认识和使用 Vite 环境变量配置

  1. 在项目根目录(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/
      
  2. 创建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 // 基本 URL
      VITE_API_URL: string // API 地址
      VITE_PROXY: [string, string][] // 表示代理配置
      VITE_USE_IMAGEMIN: boolean // 是否使用图像压缩
    }
    
  3. 创建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 : realName
        if (envName === 'VITE_PORT') realName = Number(realName)
        if (envName === 'VITE_PROXY') {
          try {
            realName = JSON.parse(realName)
          } catch (error) {
            // ignore
          }
        }
        ret[envName] = realName
      }
      return ret
    }
    
  4. 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"]
    }
    
  5. 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, //基础 URL
        server: {
          host: '0.0.0.0', //指定服务器主机地址
          port: viteEnv.VITE_PORT, //指定开发服务器端口
          strictPort: true, //若端口已被占用则会直接退出
          open: viteEnv.VITE_OPEN //服务器启动时,自动在浏览器中打开应用程序
        }
      }
    })
    
  6. 在项目中使用 Vite 提供的import.meta.env对象获取这些环境变量:

    <script setup lang="ts">
    const title = import.meta.env.VITE_APP_TITLE
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

安装 Element Plus

  1. 使用包管理器 pnpm 安装 Element Plus:

    pnpm install element-plus
    
  2. 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')
    
  3. 设置 Element Plus 默认语言为中文:

    import ElementPlus from 'element-plus'
    import zhCn from 'element-plus/es/locale/lang/zh-cn'
    
    app.use(ElementPlus, {
      locale: zhCn,
    })
    
  4. tsconfig.json 中通过 compilerOptions.type 指定全局组件类型:

    {
      "compilerOptions": {
        // ...
        "types": ["element-plus/global"]
      }
    }
    
  5. 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>
    
  6. 执行命令启动项目:

    pnpm run dev
    

    image-20240609193421586

集成 sass 配置全局变量

  1. 通过以下命令安装 sass

    pnpm add sass
    
  2. 创建src\assets\styles\variable.scss全局变量文件:

    //全局scss变量
    $color:red
    
  3. vite.config.ts中使用 additionalData 引入全局的 Sass 变量文件:

    export default defineConfig({
      css: {
        preprocessorOptions: {
          scss: {
            javaScriptEnabled: true,
            // 向全局 scss 文件内容注入变量
            additionalData: `@import "@/assets/styles/variable.scss";`
          }
        }
      }
    })
    
  4. 在 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>
    
  5. 执行命令启动项目:

    pnpm run dev
    

    image-20240610130819150

清除默认样式

通常,浏览器会对一些 HTML 元素应用一些默认的样式,但这些默认样式在不同浏览器之间可能存在差异,导致页面在不同浏览器中呈现不一致。

清除默认样式可以将所有元素的样式重置为统一的基础样式,然后再根据需要逐个重新定义。这样可以确保在编写样式时,不会受到浏览器默认样式的影响,从而更容易实现跨浏览器的一致性。

  1. 进入 NPM 官网:https://www.npmjs.com/,搜索 reset.scss,复制即可:

    image-20240610125420052

  2. 创建 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;
    }
    
  3. 创建 src\assets\styles\index.scss 文件,用于统一管理和维护项目的样式文件:

    @import './reset.scss';
    
  4. main.ts 文件中引入index.scss样式文件:

    import './assets/styles/index.scss'
    

安装 Tailwind CSS

  1. 打开 Tailwind CSS 官网【https://tailwindcss.com/】,点击【Docs】查看文档:

    image-20240609113814168

  2. 点击【Framework Guides】查看框架指南,我们的项目是使用 Vite 构建,所以点击【Vite】:

    image-20240609114049866

  3. 点击【Using Vue】查看安装步骤:

    image-20240609115121127

  4. 执行命令安装 Tailwind CSS:

    pnpm i -D tailwindcss postcss autoprefixer
    

    image-20240609115408956

  5. 运行命令生成 Tailwind CSS 配置文件:tailwind.config.js、postcss.config.js

    npx tailwindcss init -p
    

    image-20240609115511670

  6. tailwind.config.js配置文件中添加模板文件路径:

    content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}']
    
  7. 创建src\assets\styles\tailwind.scss文件, 添加 Tailwind CSS 提供的用于导入基础样式、组件和实用工具的特殊指令:

    @tailwind base;
    @tailwind components;
    @tailwind utilities;
    
  8. src\assets\styles\index.scss 文件引入tailwind.scss,或者在main.ts文件中直接引入:

    @import './tailwind.scss';
    
  9. 在项目中使用 Tailwind.css 设置内容样式:

    <template>
      <h1 class="text-3xl font-bold underline">
        Hello world!
      </h1>
    </template>
    
  10. 执行命令启动项目:

    pnpm run dev
    

    image-20240609190157155

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0605 实际集成运算放大器的主要参数和对应用电路的影响

6.5.1 实际集成运放的主要参数 6.5.2 集成运放应用中的实际问题 6.5.2 集成运放应用中的实际问题

基于51单片机的简易温控水杯恒温杯仿真设计( proteus仿真+程序+设计报告+讲解视频)

基于51单片机的简易温控水杯恒温杯仿真设计( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0099 1. 主要功能&#xff1a; 基于51单片机的简易温控水杯恒温…

RV32A\CSR\Counters 指令集

RV32A\CSR\Counters指令集 一、RV32A指令集1、Load-Reserved/Store-Conditional InstructionsLR.WSC.W2、Atomic Memory OperationsAMOSWAP.WAMOADD.WAMOAND.WAMOXOR.WAMOOR.W二、CSR(Control and Status Register) 指令集CSRRWCSRRSCSRRCCSRRWICSRRSICSRRCI三、"Zicntr…

深圳建网站

深圳是中国最具活力和创新力的城市之一&#xff0c;也是全球网站建设行业蓬勃发展的重要市场之一。随着信息科技的不断发展和互联网的普及&#xff0c;越来越多的企业和个人意识到了建立网站的重要性&#xff0c;通过网站可以为企业带来更多的业务机会和营销渠道。 建立一个优质…

【OpenGL学习】OpenGL不同版本渲染管线汇总

文章目录 一、《OpenGL编程指南》第6版/第7版的渲染管线二、《OpenGL编程指南》第8版/第9版的渲染管线 一、《OpenGL编程指南》第6版/第7版的渲染管线 图1. OpenGL 2.1、OpenGL 3.0、OpenGL 3.1 等支持的渲染管线 二、《OpenGL编程指南》第8版/第9版的渲染管线 图2. OpenGL …

上新即爆品?2024小红书爆款黄金公式

5月&#xff0c;小红书正式上线了平台级新品营销IP——“宝藏新品”&#xff0c;旨在消费愈发审慎的当下&#xff0c;帮助品牌破除不确定性&#xff0c;达成新品的高质量生长。 本期千瓜将进一步解读「宝藏新品」策略&#xff0c;帮助品牌推新呈现更多样化的成长可能。 强种草…

单张图像扩散模型(Single Image DIffusion Model)

论文&#xff1a;SinDDM: A Single Image Denoising Diffusion Model&#xff0c; ICML 2023 去噪扩散模型&#xff08;DDM&#xff09;在图像生成、编辑和恢复方面带来了惊人的性能飞跃。然而&#xff0c;现有DDM使用非常大的数据集进行训练。在这里&#xff0c;介绍一个用于…

Qwen2 阿里最强开源大模型(Qwen2-7B)本地部署、API调用和WebUI对话机器人

阿里巴巴通义千问团队发布了Qwen2系列开源模型&#xff0c;该系列模型包括5个尺寸的预训练和指令微调模型&#xff1a;Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B以及Qwen2-72B。对比当前最优的开源模型&#xff0c;Qwen2-72B在包括自然语言理解、知识、代码、数学及多…

每日一练——有效的括号

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 错误记录 #include<stddef.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h>typedef char STDataType;typedef struct Stack {STDataType* a;int capacity;int top; } Stack;vo…

【网络安全的神秘世界】磁盘空间告急?如何解决“no space left on device”的困扰

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 磁盘空间告急&#xff1f;如何解决“no space left on device”的困扰 &#x1f64b;‍♂️问题描述 错误信息 "write /var/lib/docker/tmp/GetIma…

理解数学概念——线性(线性性)

1. 线性相关词汇的词源 1.1 单词“line”的词源 这个单词是古英语“line”和古法语“ligne”二者的融合。在古英语中&#xff0c;“line”的词义为“缆绳&#xff0c;绳索&#xff1b;一系列&#xff0c;行&#xff0c;字母行&#xff1b;规则&#xff0c;方向(cable, rope; s…

【2024版】最新AI 大模型的掌握与运用技巧(非常详细)零基础入门到精通,收藏这一篇就够了

前言 曾经有一批强大的 AI模型摆在我面前&#xff0c;我却未曾珍惜&#xff0c;知道发现别人能够轻松驾驭它发挥巨大价值&#xff0c;才后悔莫及&#xff0c;如果上天给我重来一次的机会&#xff0c;我会努力学习经验和技巧&#xff0c;成为第一批熟练驾驭AI 模型的人! 随着 Ch…

可转债全部历史因子数据,提供api支持

今天在写可转债系统&#xff0c;顺便下载了一下服务器的可转债数据&#xff0c;给大家研究使用 from trader_tool.stock_data import stock_datafrom trader_tool.lude_data_api import lude_data_apiimport osclass convertible_bond_back_test_system: 可转债回测系统…

1秒揭秘:APP对接广告联盟,收益翻倍!

在当前数字时代&#xff0c;移动应用&#xff08;APP&#xff09;成为连接用户与服务的重要桥梁。 许多开发者通过开发APP并接入广告联盟&#xff0c;成功实现了收益的快速增长。 然而&#xff0c;对于初学者而言&#xff0c;从零开始开发一款能够有效对接广告联盟的APP&…

单源最短路径算法 -- 迪杰斯科拉(Dijkstra)算法

1. 简介 迪杰斯科拉&#xff08;Dijkstra&#xff09;算法是一种用于在加权图中找到最短路径的经典算法。它是由荷兰计算机科学家Edsger Wybe Dijkstra在1956年首次提出的&#xff0c;并以他的名字命名。这个算法特别适合于解决单源最短路径问题&#xff0c;即计算图中一个顶点…

在自己的电脑上搭建我的世界Java版服务器

很多朋友&#xff0c;喜欢玩Minecraft&#xff0c;也希望搭建一个服务器&#xff0c;用于和小伙伴联机&#xff1b; 并且&#xff0c;拥有服务器后&#xff0c;即使所有玩家都下线&#xff0c;“世界”依旧在运行&#xff0c;玩家可以随时参与其中&#xff0c;说不定一上线&am…

栈和队列(适配器模式模拟)

文章目录 声明stack的介绍queue的介绍deque双端队列简单介绍&#xff08;了解&#xff09;概述优缺点 适配器模式通过容器适配器模拟stack通过容器适配器模拟queue 总结 声明 模拟实现源代码已上传至gitee仓库&#xff1a;stack_queue_learn stack的介绍 stack文档介绍 sta…

go语言 | 快速生成数据库表的 model 和 queryset

就是生成 model 目录的 xxx.go 和 xxx_gen.go 文件 使用的工具&#xff1a; 快速生成 model&#xff1a;gentool&#xff1a;https://github.com/go-gorm/gen/tree/master/tools/gentool 根据 model 生成 queryset&#xff1a;go-queryset&#xff1a;https://github.com/jirfa…

开源大模型之辩:真假开源

目录 前言开源的定义什么是开源大模型&#xff1f;大模型时代首次出现闭源和开源“齐头并进”开源和闭源不是绝对对立的 大模型到底开源什么&#xff1f;传统开源软件与开源大模型的差别开源软件让开源大模型“受益匪浅” 不同大模型企业&#xff0c;开源、闭源策略不同开源…

SQL 窗口函数

1.窗口函数之排序函数 RANK, DENSE_RANK, ROW_NUMBER RANK函数 计算排序时,如果存在相同位次的记录,则会跳过之后的位次 有 3 条记录排在第 1 位时: 1 位、1 位、1 位、4 位…DENSE_RANK函数 同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次 有 3 条记录排在…