Vue3+VueCli+TS官方模板简析

这篇具有很好参考价值的文章主要介绍了Vue3+VueCli+TS官方模板简析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用脚手架安装相关依赖

使用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为自定义文件名             

Vue3+VueCli+TS官方模板简析 按方向键 ↓,选择Manually select features,enter

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

Vue3+VueCli+TS官方模板简析

手动配置,根据你需要用方向键选择(按 “空格键”选择/取消选择,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) 测试

我们选择如下

Vue3+VueCli+TS官方模板简析

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

Vue3+VueCli+TS官方模板简析

然后如下配置

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

Vue3+VueCli+TS官方模板简析

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文章来源地址https://www.toymoban.com/news/detail-509691.html

{
  "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"
  ]
}

到了这里,关于Vue3+VueCli+TS官方模板简析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

    大家好,我是yma16,本文分享利用inscode搭建vue3(ts)+antd前端模板。 2023 新星计划 vue(ts)+antd赛道报名入口:https://bbs.csdn.net/topics/616574177 搭建vue3+ts+antd的指引:认识vite_vue3 初始化项目到打包 InsCode 是一个一站式的软件开发服务平台,从开发-部署-运维-运营,都可以在 InsCode 轻松

    2024年02月16日
    浏览(47)
  • vue3+vite+ts视频背景酷炫登录模板【英雄联盟主题】

    最近我准备在自己的网站上开发一个博客系统,首先要实现后台登录界面。我选择使用Vue 3 + Vite + TypeScript框架来构建,下面是针对该主题的详细说明: 在网页中使用视频作为背景图已经相当常见了,而且网上也有很多相关的插件可供使用。我选择使用\\\"vue-responsive-video-backgr

    2024年02月15日
    浏览(46)
  • Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)

    手动安装配置Vue3 ElementPlus模板比较繁琐,网上寻找一些模板不太符合自己预期,因此花点精力搭建一个符合自己需求的架子 采用最新的组件,版本如下: vite 4.3.9 vite-plugin-mock 2.9.8 vue 3.3.4 pinia 2.1.3 vue-router 4.2.2 element-plus 2.3.6 满足自己以下功能: Vite工具热启动速度快,修改后

    2024年02月08日
    浏览(50)
  • Vue | (三)使用Vue脚手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

    学习链接:尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通,本文对应p61-p69,博客参考尚硅谷公开笔记,补充记录实操。 Vue 脚手架是 Vue 官方提供的标准化开发工具(开发平台)。 CLI :command line interface(目前已经维护了,但也试一试) 全局安装 : npm config set registry https:/

    2024年02月20日
    浏览(41)
  • Vue | (三)使用Vue脚手架(下)| 尚硅谷Vue2.0+Vue3.0全套教程

    学习链接:尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通,本文对应p79-p95,博客参考尚硅谷公开笔记,补充记录实操。 区别于JS里的内置事件。 一种 组件间通信 的方式,适用于: 子组件 === 父组件 使用场景 :A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自

    2024年02月22日
    浏览(55)
  • 【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?

    本文共分为四个部分,系统解析了 vue.js 官方脚手架 create-vue 的实现细节。 第一部分主要是一些准备工作,如源码下载、项目组织结构分析、依赖分析、功能点分析等; 第二部分分析了 create-vue 脚手架是如何执行的,执行文件的生成细节; 第三部分是本文的核心部分,主要

    2024年02月09日
    浏览(43)
  • 使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv-ui开发脚手架

    项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/uniapp-vue3-ts-scaffold 近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。但前台系统花样繁多

    2024年01月20日
    浏览(60)
  • vue3+ts使用antv/x6

    使用 2.x 版本 x6.antv 新官网: 项目结构 1、初始化画布 index.vue 2、注册节点 渲染 Vue 节点,这个文档完全够用 节点node.vue 3、在画布引入并注册自定义节点,配置节点信息 主画布:index.vue 展示 小小预告: 下一篇 自定义节点样式 再下一篇 vue3 + antv/x6 实现拖拽侧边栏节点到画布

    2024年02月13日
    浏览(35)
  • Vue3脚手架笔记

    Vue模板语法有2大类 : 1.插值语法: 功能:用于解析标签体内容。 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。 ** 2.指令语法:** 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)。 举例:v-bind:href=“xxx” 或 简写为 :href=“xxx”,xxx同

    2024年01月24日
    浏览(48)
  • vue3笔记-脚手架篇

    第一章 基础篇 vue2与vue3的一些区别 响应式系统: Vue 2 使用 Object.defineProperty 进行响应式数据的劫持和监听,它对数据监听是一项项的进行监听,因此,当新增属性发生变化时,它无法监测到,并且响应性能不是很好。 Vue 3 使用 Proxy 来实现响应式系统,它用一个中间代理来管

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包