Vue3+VueCli+TS官方模板简析

news2024/9/27 12:07:05

使用脚手架安装相关依赖

使用vueCli 安装预设的vuex+ts+less+router

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version

## 安装或者升级你的@vue/cli
npm install -g @vue/cli

## 创建
vue create vue3_cli_ts_htgl          //create vue3_cli_ts_htgl为自定义文件名             

按方向键 ↓,选择Manually select features,enter

手动配置:是我们所需要的面向生产的项目,提供可选功能的 npm 包

手动配置,根据你需要用方向键选择(按 “空格键”选择/取消选择,A键全选/取消全选,i反选)对应功能

  1. ? Check the features needed for your project: (Press to select, to toggle all, to invert selection)
  2. ( ) TypeScript // JavaScript的一个超集(添加了可选的静态类型和基于类的面向对象编程:类型批注和编译时类型检查、类、接口、模块、lambda 函数)

  3. ( ) Progressive Web App (PWA) Support // 渐进式Web应用程序
  4. () Router // vue-router(vue路由)
  5. () Vuex // vuex(vue的状态管理模式)
  6. () CSS Pre-processors // CSS 预处理器(如:less、sass)
  7. () Linter / Formatter // 代码风格检查和格式化(如:ESlint)
  8. () Unit Testing // 单元测试(unit tests)
  9. () E2E Testing // e2e(end to end) 测试

我们选择如下

确认enter后,需要选择vue版本,选择3.x的版本然后继续确认

然后如下配置

是否使用class风格的组件语法:Use class-style component syntax?输入N

Vue CLI v4.5.15

? Please pick a preset: Manually select features

//检查项目所需的功能:选择 Vue 版本、Babel、TS、Router、Vuex、CSS 预处理器

? Check the features needed for your project: Choose Vue version, Babel, TS, Router, Vuex, CSS Pre-processors

//选择你想用 3.x 启动项目的 Vue.js 版本

? Choose a version of Vue.js that you want to start the project with 3.x

//是否使用class风格的组件语法

? Use class-style component syntax? No

//将 Babel 与 TypeScript 一起使用(现代模式、自动检测的 polyfill、转译 JSX 需要)

? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes

//路由器使用历史模式? (需要为生产中的索引回退正确设置服务器)否

? Use history mode for router? (Requires proper server setup for index fallback in production) No

//选择一个 CSS 预处理器(默认支持 PostCSS、Autoprefixer 和 CSS 模块):Less

? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): Less

//你更喜欢将 Babel、ESLint 等的配置放在哪里? 在专用配置文件中

? Where do you prefer placing config for Babel, ESLint, etc.? In dedicated config files

//将此保存为未来项目的预设?(是/否)

? Save this as a preset for future projects? (y/N) N

至此,配置完毕,桌面会出现一个vue3_cli_ts_htgl文件夹

默认项目解析

文件夹结构

├─ public
│  ├─ favicon.ico            //浏览器标签文件图标
│  └─ index.html             //总的入口文件
├─ src										
│  ├─ App.vue	               //根组件
│  ├─ assets                 //静态资源目录
│  │  └─ logo.png
│  ├─ components             //自定义组件目录(可删除)
│  │  └─ HelloWorld.vue
│  ├─ main.ts								 //项目入口
│  ├─ router								 //路由
│  │  └─ index.ts
│  ├─ shims-vue.d.ts         //ts声明文件,使ts识别.vue文件
│  ├─ store                  //vuex
│  │  └─ index.ts
│  └─ views                  //自定义路由组件目录(可删除)
│     ├─ About.vue
│     └─ Home.vue
└─ tsconfig.json             //ts的配置文件
├─ .browserslistrc					 //配置兼容浏览器
├─ .gitignore
├─ babel.config.js           //babel.config.js配置文件
├─ package-lock.json
├─ package.json
├─ README.md

默认文件内容

HelloWorld.vue

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <p>
      For a guide and recipes on how to configure / customize this project,<br>
      check out the
      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
    </p>
    <h3>Installed CLI Plugins</h3>
    <ul>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript" target="_blank" rel="noopener">typescript</a></li>
    </ul>
    <h3>Essential Links</h3>
    <ul>
      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
    </ul>
    <h3>Ecosystem</h3>
    <ul>
      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
    </ul>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue';

export default defineComponent({
  name: 'HelloWorld',
  props: {
    msg: String,
  },
});
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

router->index.ts

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import Home from '../views/Home.vue'

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

export default router

store->index.ts

import { createStore } from 'vuex'

export default createStore({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

App.vue

<template>
  <div id="nav">
    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link>
  </div>
  <router-view/>
</template>

<style lang="less">
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

#nav {
  padding: 30px;

  a {
    font-weight: bold;
    color: #2c3e50;

    &.router-link-exact-active {
      color: #42b983;
    }
  }
}
</style>

main.ts

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

createApp(App).use(store).use(router).mount('#app')

shims-vue.d.ts

/* eslint-disable */
declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}

.browserslistrc

> 1%
last 2 versions
not dead

babel.config.js

module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}

package.json

{
  "name": "vue3_cli_ts_htgl",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build"
  },
  "dependencies": {
    "core-js": "^3.6.5",
    "vue": "^3.0.0",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-plugin-typescript": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "less": "^3.0.4",
    "less-loader": "^5.0.0",
    "typescript": "~4.1.5"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "importHelpers": true,
    "moduleResolution": "node",
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "baseUrl": ".",
    "types": [
      "webpack-env"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

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

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

相关文章

分布式数据模型详解:OldSQL => NoSQL => NewSQL

前言 本文隶属于专栏《大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据理论体系 思维导图 OldSQL OldSQL 通常是在与 NoSQL 数据库相…

sap ui5 list单选列表

<Listitems"{path: }"mode"SingleSelectLeft"selectionChange""includeItemInSelection"true"><StandardListItem title""/></List>

泰迪云课堂在线实习项目介绍

在线实习项目既可以提高学生学习实践能力&#xff0c;也可以缓解学校实训培养压力&#xff0c;还可以让学生在校期间获得在线实习证明。除此之外&#xff0c;学习在线实习项目&#xff0c;学生也可以提早接触社会&#xff0c;为未来就业打好基础。 新零售|无人智能售货机…

【自由下落物体图像】物体从高空自由下落时的图像对比

自由落体两种情况分析 图像一&#xff1a;速度与时间的图像 当自由物体下落时&#xff0c;我们会得到如下的速度V和时间t的图像。 import matplotlib.pyplot as plt import math plt.rc("font",familyYouYuan) plt.rcParams[axes.unicode_minus]False # 定义常量…

【因特网】网络杂谈(3)之你真的了解因特网吗?

涉及知识点 什么是因特网&#xff0c;因特网简介&#xff0c;如何接入因特网&#xff0c;我国的因特网&#xff0c;因特网怎么接入&#xff0c;非对称数字用户环路&#xff0c;公共交换电话网&#xff0c;综合业务数字网&#xff0c;几种接入因特网的方式&#xff0c;深入了解…

2023 MWC上海展开幕:联想集团首次大规模亮相3S全栈能力

6月28日&#xff0c;亚洲最具影响力的2023上海世界移动通信大会&#xff08;2023 MWC上海&#xff09;正式开幕。联想集团作为中国主力智能解决方案服务商&#xff0c;以“全栈智能 融合成长”为主题&#xff0c;首次大规模亮相基于新IT架构的3S&#xff08;智能设备、智能基础…

通付盾发布UIAM白皮书,利用区块链、大模型AI,以及无证书分布式身份认证赋能工业互联网

简介 UIAM白皮书结合各行业与国内外IAM发展状况&#xff0c;对IAM发展历程、核心能力以及现代增强型IAM技术的演进路线进行探讨。探索身份和信息安全管理与区块链、大模型AI、无证书分布式身份认证等技术趋势&#xff0c;以及UIAM技术在工业互联网的应用。期望能够帮助企业组织…

【NOSQL数据库】Redis数据库的配置与优化

目录 一、关系型数据库与非关系型数据库1.1关系型数据库1.2非关系型数据库1.3关系型数据库与非关系型数据库的区别1.3.1数据存储方式不同1.3.2扩展方式不同1.3.3对事务性的支持不同 1.4非关系型数据库产生的背景1.5总结 二、Redis简介2.1Redis的优点2.2使用场景2.3哪些数据适合…

【FPGA】Verilog:时序电路 | 触发器电路 | 上升沿触发 | 同步置位 | 异步置位

前言&#xff1a;本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例&#xff1a;触发器电路 ​ 功能特性&#xff1a; 采用 Xilinx Artix-7 XC7A35T芯片 配置方式&#xff1a;USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度 存储器&#xff1a;…

java图书管理系统

图书管理系统 演示视频 技术&#xff1a; 基于java图书管理系统系统的设计与实现 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;8.x版本都可&#xff09; 硬件环境&#xff1a;Window…

USB Mass Storage Class

编辑博客时&#xff0c;回车的意思是切换段落&#xff0c;shift回车才是换行。 SCSI Interface Controller: AMD am5380 1 U盘量产工具 - 主控芯片私有的SCSI命令 ChipEasy / ChipGenius FlashGenius MyDiskTest HS握手时&#xff0c;Chirp KJ的频率大概是10KHz。 2 SCSI CDB 2…

呼叫中心系统经常被UDP攻击的解方法

针对语音系统经常被攻击&#xff0c;或者盗打&#xff0c;可使用防火墙和入侵检测系统来监视和阻止潜在攻击。 为此开发了网页版本web防火墙插件&#xff0c;其原理是&#xff0c;用java程序控制iptables 或firewall放行规则。 shell脚本安装完成插件后&#xff0c;防火墙默认…

VS2022附加到Unity之后控制台报错乱码,重启unity可以正常运行,但是VS不能附加Unity

错误描述 VS2022附加到Unity之后Unity 报错乱码&#xff0c;但是Unity关闭重新开始运行不会报错。错误信息如下 ϵͳ&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ָ&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd…

人工智能(AI)在金融行业的应用

人工智能&#xff08;AI&#xff09;技术在金融行业的应用日益广泛&#xff0c;为金融机构提供了更高效、更智能的解决方案。以下和大家分享AI在金融行业的一些主要应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0…

【Java基础学习打卡13】Java开发工具

目录 前言一、主流IDE1.Eclipse&#xff08;免费&#xff09;2.IDEA&#xff08;收费&#xff09; 二、何时使用IDE&#xff1f;三、EditPlus四、EditPlus集成java编译运行命令1.集成javac&#xff08;编译&#xff09;命令2.集成java&#xff08;运行&#xff09;命令3.集成后…

在Linux上安装和使用免费版本的PyMol

技术背景 PyMol是一个类似于VMD的分子可视化工具&#xff0c;也是在PyQt的基础上开发的。但是由于其商业化运营&#xff0c;软件分为了教育版、开源版和商业版三个版本。其中教育版会有水印&#xff0c;商业版要收费&#xff0c;但是官方不提供开源版本的安装方法。按照参考链接…

Windows下Jdk1.8的下载/安装/配置

文章目录 Windows下Jdk1.8的下载/安装/配置1. Jdk的下载2. Jdk的安装3. Jdk的配置4. 检查是否安装成功 Windows下Jdk1.8的下载/安装/配置 1. Jdk的下载 下载地址 2. Jdk的安装 3. Jdk的配置 1. 右键我的电脑 → 属性 → 高级系统配置 → 环境变量 → 系统变量&#xff1a;…

企业级微服务架构实战项目--xx优选-用户登录

一 用户登录的触发页面 1.登录常量 2.登录地址 3.配置域名 4.启动程序 触发连接小程序后端的登录接口 小程序controller的登录方法

MFC第十一天 CDialog类的三大虚函数简介 CS模式下员工管理系统项目插入列表数据的功能开发

文章目录 CDialog类三大重要虚函数MFC中反射型消息CS模式员工管理系统插入列表数据的功能开发客户端代码服务器端代码 CDialog类三大重要虚函数 a)MFC平台希望接管三大重要消息&#xff1a;OnInitDialog() OnOK() OnCancel() WM_INITDIALOG: virtual BOOL OnInitDialog(); 当对…

数据库监控与调优【十三】—— LIMIT语句优化

LIMIT语句优化 LIMIT语句使用规则 limit<offset>, <size> offset&#xff1a;返回结果第一行的偏移量&#xff08;想要跳过多少行&#xff09;size&#xff1a;指定返回多少条 举例说明 -- 查询第1页时&#xff0c;花费92ms SELECT * FROM employees LIMIT 0,…