使用Vite2+TypeScript4+Vue3技术栈,如何入手开发项目

简介: 使用Vite2+TypeScript4+Vue3技术栈,如何入手开发项目

前言


今天,我们使用Vite2.0+Vue3+TS来试玩一下,开发一个demo项目。


实战


我们,打开Vite官方网站(cn.vitejs.dev/)。


Vite (法语意为 "快速的",发音 /vit/) 是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:


一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。 一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可以输出用于生产环境的优化过的静态资源。 Vite 意在提供开箱即用的配置,同时它的 插件 API 和 JavaScript API 带来了高度的可扩展性,并有完整的类型支持。


这里,我们将Vite与VueCLI做一下对比。


  • Vite在开发模式下不需要打包可以直接运行,使用的是ES6的模块化加载规则;


  • VueCLI开发模式下必须对项目打包才可以运行;


  • Vite基于缓存的热更新;


  • VueCLI基于webpack的热更新;


搭建项目


我们来搭建第一个 Vite 项目,我这里使用Yarn依赖管理工具进行创建项目。


yarn create @vitejs/app


在命令行键入以上命令,然后你可能会等待一会儿~


依次配置Project nameSelect a template


Project name: vite-vue-demo
Select a template: vue-ts


因为,我们这里要是用Vue+Ts开发项目所以我们选择vue-ts这个模板。一顿操作之后,会提示你键入以下命令,依次填入即可。


cd vite-vue-demo
yarn
yarn dev


这样我们搭建项目就完成了。


项目文件夹一览


我们会看到以下文件及其文件夹。


node_modules  ---依赖文件夹
public  ---公共文件夹
src  ---项目主要文件夹
.gitignore  ---排除git提交配置文件
index.html  ---入口文件
package.json  ---模块描述文件
tsconfig.json  ---ts配置文件
vite.config.ts  ---vite配置文件


开发前配置


在开发之前呢,我们需要做以下工作。


1. 编辑ts配置文件


根据需要,配置需要的配置项。compilerOptions里面配置的是编译时的配置项,include项是配置生效包括在内的路径,而exclude则恰恰相反,排除在外的路径。


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


2. 配置vite配置文件


为什么需要配置这个文件呢?是因为我们开发这个demo项目,需要局部引入Element Plus UI框架,另外,让我们简单了解下怎么配置Vite。在之前我们使用VueCLI3.x创建项目时配置项目是在根目录下vue.config.js文件下进行配置。这个文件应该导出一个包含了选项的对象。


module.exports = {
  // 选项...
}


vite.config.ts也与其相似。


export default {
  // 配置选项
}


因为 Vite 本身附带 Typescript 类型,所以可以通过 IDE 和 jsdoc 的配合来进行智能提示,另外你可以使用 defineConfig 帮手函数,这样不用 jsdoc 注解也可以获取类型提示。这里呢,我们这样配置vite.config.ts


import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()]
})


你会发现,Vue在这里被当做vite的一个内置插件引入进来。刚才,我们说要局部引入Element Plus UI框架,我们打开Element Plus UI局部引入网址:(element-plus.gitee.io/#/zh-CN/com…


import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vitePluginImp from "vite-plugin-imp";
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
    vitePluginImp({
    libList: [
      {
        libName: 'element-plus',
        style: (name) => {
          return`element-plus/lib/theme-chalk/${name}.css`
        }
      }
    ]
  })],
  server: {
    port: 6061
  },
})


vite-plugin-imp一个自动导入组件库样式的vite插件。


主要项目文件夹Src一览


以下是最初始的项目文件目录。


assets  ---静态文件夹
components  ---组件文件夹
App.vue  ---页面文件
main.ts  ---项目入口文件
shims-vue.d.ts  ---类型定义文件(描述文件)


这么多文件,我们不一一展示了,主要看下App.vuemain.tsshims-vue.d.ts


App.vue


<template>
  <img alt="Vue logo" src="./assets/logo.png" />
  <HelloWorld msg="Hello Vue 3 + TypeScript + Vite" />
</template>
<script lang="ts">
import { defineComponent } from 'vue'
import HelloWorld from './components/HelloWorld.vue'
export default defineComponent({
  name: 'App',
  components: {
    HelloWorld
  }
})
</script>
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>


main.ts


import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')


shims-vue.d.ts


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


这里,我们看到defineComponent这个Vue3的一个方法。为什么这里会使用它呢?引用官方的一句话:


从实现上看,defineComponent 只返回传递给它的对象。但是,就类型而言,返回的值有一个合成类型的构造函数,用于手动渲染函数、TSX 和 IDE 工具支持。


引入vue-router4


看完之前的基础配置,我们现在准备开始引入Vue3的生态系统。


现在我们安装 vue-router 版本的时候,默认还是安装的 3.x 版本的,由于 vue3 的更新发生很大的变化,所以为了兼容处理,vue-router 也将发布最新版 4.x 版本了。


这是router4的官方网址:


https://next.router.vuejs.org/


1. 安装


npm install vue-router@4


2. 配置文件


安装完依赖后,在项目文件夹src下创建一个router文件夹,里面创建一个index.ts文件(因为这里我们基于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",
        component: () =>
            import("../views/About.vue")
    }
];
const router = createRouter({
    history: createWebHashHistory(),
    routes
});
export default router;


另外,你需要在main.ts文件中引入它,并且注册一下。


import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
createApp(App).use(router).mount("#app");


为了实验一下效果,我们在src文件夹下创建一个views文件夹,里面创建两个页面文件。分别是About.vueHome.vue


home.vue


<template>
  <p class="txt">home</p>
</template>
<script lang="ts">
import { Options, Vue } from "vue-class-component";
@Options({
})
export default class Home extends Vue {}
</script>
<style scoped>
.txt{
  color: red;
}
</style>


about.vue


<template>
  <p>about</p>
</template>
<script>
export default {
name: "About"
}
</script>


最后,你在App.vue文件中。


<template>
  <router-link to="/">Home</router-link> |
  <router-link to="/about">About</router-link>
  <router-view />
</template>
<script lang="ts">
</script>


这样,vue-router4就这么成功引入了。


引入css预处理语言


这里呢,我们引入scss。因为我们使用的vite这个构建工具构建的项目,所以我们只需要这样。


npm install -D sass


我们可以看到官方解释:


Vite 同时提供了对 .scss, .sass, .less, .styl 和 .stylus 文件的内置支持。没有必要为他们安装特定的 vite 插件,但相应的预处理器依赖本身必须安装。


所以,你可以这样使用scss。


<template>
  <p class="txt">home</p>
</template>
<script lang="ts">
import { Options, Vue } from "vue-class-component";
@Options({
})
export default class Home extends Vue {}
</script>
<style scoped lang="scss">
.txt{
  color: red;
}
</style>


使用Element Plus UI


我们在上面已经成功配置局部引入Element Plus框架,那我们可以这样使用它。


<template>
  <p class="txt">home</p>
  <ElButton>默认按钮</ElButton>
</template>
<script lang="ts">
import { Options, Vue } from "vue-class-component";
import { ElButton } from 'element-plus'
@Options({
  components: {
    ElButton
  }
})
export default class Home extends Vue {}
</script>
<style scoped lang="scss">
.txt{
  color: red;
}
</style>


这里,你会发现引入了 vue-class-component这个组件,它是干什么的呢?


官方网址:


https://class-component.vuejs.org/


Vue Class Component is a library that lets you make your Vue components in class-style syntax.


译:Vue类组件是一个库,允许您以类样式语法创建Vue组件。


针对vue3版本,我们使用Vue Class Component v8,也就是8版本。


https://www.npmjs.com/package/vue-class-component/v/8.0.0-rc.1


你可以这样安装它。


npm i vue-class-component@8.0.0-rc.1


引入vue自定义组件


我们经常自己封装组件,那么在这个项目中我们是怎样引入的呢?我们在src目录下创建一个components文件夹,里面创建一个HelloWorld.vue文件。


HelloWorld.vue


<template>
  <h1>{{ msg }}</h1>
</template>
<script lang="ts">
import { ref, defineComponent } from 'vue'
export default defineComponent({
  name: 'HelloWorld',
  props: {
    msg: {
      type: String,
      required: true
    }
  },
  setup: () => {
    const count = ref(0)
    return { count }
  }
})
</script>
<style scoped lang="scss">
a {
  color: #42b983;
}
label {
  margin: 0 0.5em;
  font-weight: bold;
}
code {
  background-color: #eee;
  padding: 2px 4px;
  border-radius: 4px;
  color: #304455;
}
</style>


然后,我们在App.vue引入它。


<template>
  <HelloWorld msg="Hello Vue 3 + TypeScript + Vite" />
  <router-link to="/">Home</router-link> |
  <router-link to="/about">About</router-link>
  <router-view />
</template>
<script lang="ts">
import { defineComponent } from 'vue'
import HelloWorld from './components/HelloWorld.vue'
export default defineComponent({
  name: 'App',
  components: {
    HelloWorld
  }
})
</script>
<style >
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
</style>


引入vuex4


vue生态中肯定少不了vuex,为了兼容vue3,vuex也推出了4.0版本。


https://next.vuex.vuejs.org/


你可以这样安装它。


npm install vuex@next --save


你可以在src文件夹创建一个store文件夹,里面创建一个一个index.ts文件。


import { createStore } from "vuex";
export default createStore({
    state: {},
    mutations: {},
    actions: {},
    modules: {}
});


然后,你在main.ts文件中这样引入使用它。


import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
createApp(App).use(router).use(store)
    .mount("#app");


结语


我们这里只是简单地使用vite+ts+vue3搭建了一个小demo,如果你想更深层地使用它,可以关注我的动态。



相关文章
|
29天前
|
JavaScript 前端开发 IDE
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
|
1月前
|
开发框架 缓存 前端开发
基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用
基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用
|
1月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
32 3
|
1月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
38 1
|
1月前
|
资源调度 JavaScript 前端开发
Vue3+TypeScript前端项目新纪元:揭秘高效事件总线Mitt,轻松驾驭组件间通信的艺术!
【8月更文挑战第3天】Vue3结合TypeScript强化了类型安全与组件化开发。面对大型应用中复杂的组件通信挑战,可通过引入轻量级事件发射器Mitt实现事件总线模式。Mitt易于集成,通过简单几步即可完成安装与配置:安装Mitt、创建事件总线实例、并在组件中使用`emit`与`on`方法发送及监听事件。此外,利用TypeScript的强大类型系统确保事件处理器正确无误。这种方式有助于保持代码整洁、解耦组件,同时提高应用的可维护性和扩展性。不过,在大规模项目中需谨慎使用,以防事件流过于复杂难以管理。
69 1
|
1月前
|
开发框架 JSON 缓存
基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理
基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理
|
1月前
|
开发框架 前端开发 JavaScript
基于SqlSugar的开发框架循序渐进介绍(18)-- 基于代码生成工具Database2Sharp,快速生成Vue3+TypeScript的前端界面和Winform端界面
基于SqlSugar的开发框架循序渐进介绍(18)-- 基于代码生成工具Database2Sharp,快速生成Vue3+TypeScript的前端界面和Winform端界面
|
1月前
|
开发框架 前端开发 JavaScript
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
|
1月前
|
开发框架 前端开发 JavaScript
在Vue3+TypeScript 前端项目中使用事件总线Mitt
在Vue3+TypeScript 前端项目中使用事件总线Mitt
|
2月前
|
开发框架 监控 JavaScript
基于SqlSugar的开发框架循序渐进介绍(11)-- 使用TypeScript和Vue3的Setup语法糖编写页面和组件的总结
基于SqlSugar的开发框架循序渐进介绍(11)-- 使用TypeScript和Vue3的Setup语法糖编写页面和组件的总结