当前位置:   article > 正文

Vite+Typescript+Vue3项目搭建_vue3创建typescript项目

vue3创建typescript项目
    1. // main.ts
    2. import { createApp } from 'vue'
    3. import App from './App.vue'
    4. import router from './router'
    5. import store from './store'
    6. import ElementPlus from 'element-plus' // 引入element-plus
    7. import 'element-plus/dist/index.css' // 引入element-plus的样式
    8. const app = createApp(App)
    9. app.use(router)
    10. app.use(store)
    11. app.use(ElementPlus) // use element-plus
    12. app.mount('#app')
    前端框架:Vue3
  • 构建工具:Vite
  • 路由:vue-router 4x
  • 状态管理:vuex 4x
  • AJAX:axios
  • UI库:element-plus
  • 数据模拟:mockjs
  • 代码规范:eslint
  • 代码格式化:Prettier
  • css预处理:sass

开始构建 

1. 初始化项目

npm init vite@latest 

 cd vite-project  // 打开这个目录
  npm install       // 安装依赖
  npm run dev    // 启动项目

2. 代码校验

首先安装eslint然后初始化eslint:

  1. npm i eslint
  2. npx eslint --init

 这样我们的eslint就安装完成了,不过由于Vue3的语法规则和Vue2不同,有些情况下我们的正常开发也会报错,所以需要在rules里面添加如下配置:

        .eslintrc.js 文件内容如下

  1. //.eslintrc.js
  2. module.exports = {
  3. env: {
  4. browser: true,
  5. es2021: true
  6. },
  7. extends: [
  8. 'plugin:vue/vue3-essential',
  9. 'standard-with-typescript'
  10. ],
  11. overrides: [
  12. ],
  13. parserOptions: {
  14. ecmaVersion: 'latest',
  15. sourceType: 'module'
  16. },
  17. plugins: [
  18. 'vue'
  19. ],
  20. rules: {
  21. 'vue/no-multiple-template-root': 0,
  22. 'no-unused-vars': [
  23. 'error',
  24. { varsIgnorePattern: '.*', args: 'none' }
  25. ]
  26. }
  27. }

 第一项是因为Vue3允许template下面有多个标签,第二个是script setup标签下,定义的变量或方法如果未使用会报错,但其实这些方法和变量可以直接在template中使用的。

3.代码格式化

安装prettier:

npm i prettier

然后在根目录创建.prettierrc文件,配置如下

  1. {
  2. "semi": false,
  3. "singleQuote": true,
  4. "trailingComma": "none",
  5. "printWidth": 100,
  6. "bracketSpacing": true,
  7. "jsxBracketSameLine": true,
  8. "useEditorConfig": true,
  9. "useTabs": false,
  10. "vueIndentScriptAndStyle": true,
  11. "arrowParens": "avoid",
  12. "htmlWhitespaceSensitivity": "ignore",
  13. "overrides": [
  14. {
  15. "files": ".prettierrc"
  16. }
  17. ]
  18. }

配置完成后可以在vscode安装Prettier插件,实现保存自动格式化文件。
完成后保存文件发现报错了,这是因为Prettier格式化后的代码与eslint规范冲突,这里我们使用eslint-config-prettier这个插件解决这个问题,安装插件:

npm i eslint-config-prettier -D

安装完成后还需要在.eslintrc.js文件中加上一段配置才能生效,这里就直接把整个.eslintrc.js拷上来了:

  1. module.exports = {
  2. env: {
  3. browser: true,
  4. es2021: true
  5. },
  6. extends: [
  7. 'plugin:vue/essential',
  8. 'standard',
  9. 'prettier' // 就是这段配置
  10. ],
  11. parserOptions: {
  12. ecmaVersion: 'latest',
  13. parser: '@typescript-eslint/parser',
  14. sourceType: 'module'
  15. },
  16. plugins: [
  17. 'vue',
  18. '@typescript-eslint'
  19. ],
  20. rules: {
  21. 'vue/no-multiple-template-root': 0,
  22. 'no-unused-vars': [
  23. 'error',
  24. { varsIgnorePattern: '.*', args: 'none' }
  25. ]
  26. }
  27. }

至此,代码格式化及校验就完成了。

4.配置路由

直接安装vue-router

npm install vue-router@4

在src文件夹下新建router目录,并在目录下新建index.ts文件,并做如下配置:

  1. // index.ts
  2. import { createRouter, createWebHashHistory } from 'vue-router'
  3. import HelloWorld from '../components/HelloWorld.vue'
  4. const routes = [{ path: '/', component: HelloWorld }]
  5. export default createRouter({
  6. history: createWebHashHistory(),
  7. routes
  8. })

在main.ts中引入该文件:

  1. // main.ts
  2. import { createApp } from 'vue'
  3. import App from './App.vue'
  4. import router from './router'
  5. const app = createApp(App)
  6. app.use(router)
  7. app.mount('#app')

在App.vue里添加router-view标签:

  1. // App.vue
  2. <template>
  3. <router-view></router-view>
  4. </template>
  5. <script setup lang="ts"></script>
  6. <style>
  7. #app {
  8. font-family: Avenir, Helvetica, Arial, sans-serif;
  9. -webkit-font-smoothing: antialiased;
  10. -moz-osx-font-smoothing: grayscale;
  11. text-align: center;
  12. color: #2c3e50;
  13. margin-top: 60px;
  14. }
  15. </style>

启动下,看下是否生效:

npm run dev

因为我们在App.vue中去掉了HelloWorld组件的引入,改用router的形式,如果界面还能显示出来,就说明配置成功了。

5.配置状态管理器

首先安装vuex,默认的还是3x版本,vue3是不支持的,这里需要这样安装:

npm install vuex@next -S

安装完成后在src文件夹下新建store文件夹,然后新建index.ts文件:

  1. // store/index.ts
  2. import { createStore } from 'vuex'
  3. const store = createStore({
  4. state() {
  5. return {
  6. count: 0
  7. }
  8. },
  9. mutations: {
  10. increment(state: any) {
  11. state.count++
  12. }
  13. }
  14. })
  15. export default store

 在main.ts文件中引入store:

  1. // main.ts
  2. import { createApp } from 'vue'
  3. import App from './App.vue'
  4. import router from './router'
  5. import store from './store'
  6. const app = createApp(App)
  7. app.use(router)
  8. app.use(store)
  9. app.mount('#app')

6.element-plus

element-ui的vue3版本,首先安装它:

npm install element-plus --save

在main.ts中作出如下配置:

  1. // main.ts
  2. import { createApp } from 'vue'
  3. import App from './App.vue'
  4. import router from './router'
  5. import store from './store'
  6. import ElementPlus from 'element-plus' // 引入element-plus
  7. import 'element-plus/dist/index.css' // 引入element-plus的样式
  8. const app = createApp(App)
  9. app.use(router)
  10. app.use(store)
  11. app.use(ElementPlus) // use element-plus
  12. app.mount('#app')

然后就可以使用element-plus的组件了,比较多,使用的时候直接参照官方文档就行。

7.封装axios

安装axios:

npm i axios

在src文件夹下新建utils文件夹,然后在其下创建request.ts文件:

  1. import axios from 'axios'
  2. import { ElMessage } from 'element-plus'
  3. const instance = axios.create({
  4. baseURL: '',
  5. timeout: 5000
  6. })
  7. instance.interceptors.request.use(
  8. config => {
  9. return config
  10. },
  11. error => {
  12. console.log(error)
  13. return Promise.reject(error)
  14. }
  15. )
  16. instance.interceptors.response.use(
  17. response => {
  18. const res = response.data
  19. if (res.status !== 200) {
  20. ElMessage({
  21. message: res.message || 'Error',
  22. type: 'error',
  23. duration: 5 * 1000
  24. })
  25. return Promise.reject(new Error(res.message || 'Error'))
  26. } else {
  27. return res.data
  28. }
  29. },
  30. error => {
  31. console.log('err' + error) // for debug
  32. ElMessage({
  33. message: error.message,
  34. type: 'error',
  35. duration: 5 * 1000
  36. })
  37. return Promise.reject(error)
  38. }
  39. )
  40. export default instance

src下新建api文件夹,创建一个user.ts文件,并创建一个登录的请求:

  1. import request from '../utils/request'
  2. export function login(data: any) {
  3. return request({
  4. url: '/user/login',
  5. method: 'post',
  6. data
  7. })
  8. }

当然,现在还调不通,所以我们先配置下mock。

8.mockjs

安装mockjs:

npm i mockjs -D

在根目录新建mock文件夹,并新建index.ts文件:

  1. // index.ts
  2. import Mock from 'mockjs'
  3. // 设置拦截ajax请求的相应时间
  4. Mock.setup({
  5. timeout: '200-600'
  6. })
  7. Mock.mock('/user/login', 'post', (params: any) => {
  8. return {
  9. data: { token: '123' },
  10. status: 200,
  11. message: 'success'
  12. }
  13. })
  14. export default {}

简单设置一个login接口,让我们能够通过axios调通,然后在main.ts中引入mock:

import '../mock'

启动项目 访问模拟接口

9.css预处理

vite是支持sass的,但是还是需要我们先安装一下,不然会报错:

npm install --save-dev sass

10.unplugin-auto-import

每次写页面文件需要从vue导入部分内容,如:

ref、reactive……

使用这个插件可以省去这个步骤

npm i -D unplugin-auto-import

然后在vite.config.ts中的vue()后引入

  1. AutoImport({
  2. imports: ['vue','vue-router']
  3. })
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/648088
推荐阅读
相关标签
  

闽ICP备14008679号