vue3+vite+typescirpt搭建项目

源于目前 vite 搭建的项目没有vue-router、vuex、单元测试以及测试环境,自己搭建一个开箱即用的集成项目

集成项目必备的基建

  • ts
  • vuex
  • vue-router
  • e2e
    • cypress
  • test unit
    • jest + vtu
  • eslint + prettier
  • verify git commit message
  • CI
  • alias
  • server

步骤

配置vite

安装

yarn create @vitejs/app my-vue-app --template vue-ts

配置

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  base:"./", // 打包路径
  resolve: {
    alias:{
      '@': path.resolve(__dirname, './src') // 设置别名
    }
  },
  server: {
    port:4000,// 启动端口
    open: true,
    proxy: {
      // 选项写法
      '/api': 'http://123.56.85.24:5000'// 代理网址
    },
    cors:true
  }
})

配置路由

yarn add vue-router@4 --save

在src下新建router目录,新建index.ts文件

import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
const routes: Array<RouteRecordRaw> = [
  {
    path: "/",
    name: "Home",
    meta: {
      title: "首页",
      keepAlive: true
    },
    component: () => import("../views/Home/index.vue"),
  },
  {
    path: "/about",
    name: "About",
    meta: {
      title: "关于",
      keepAlive: true
    },
    component: () => import("../views/About/index.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')

配置数据中心vuex(4.x)

安装

yarn add vuex@next --save

配置

在src下创建store目录,并在store下创建index.ts

import { createStore } from "vuex";
export default createStore({
  state: {
    listData:{1:10},
    num:10
  },
  mutations: {
    setData(state,value){
        state.listData=value
    },
    addNum(state){
      state.num=state.num+10
    }
  },
  actions: {
    setData(context,value){
      context.commit('setData',value)
    },
  },
  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')

对 sass的支持

不需要引入 sass 与webpack 相关的依赖包和loader

yarn add -D sass

配置cssnext处理浏览器兼容差异问题

安装cssnext

yarn add postcss-cssnext -S

配置postcss-cssnext

module.exports = {
  plugins: {
    "postcss-cssnext": {
      browsers: [
        "Android >= 4.0",
        "iOS >= 7",
        "Chrome > 31",
        "ff > 31",
        "ie >= 8",
        "last 10 versions"
      ]
    }
  }
};

移动端适配

采用的移动端适配方式是将px转rem,大家第一时间想到的就是使用postcss-pxtorem

安装

yarn add postcss-pxtorem -D

配置

之前已经配置过postcss-cssnext了,而postcss-pxtorem同样也只是postcss的一个插件,所以可以公用一个配置文件

module.exports = {
  plugins: {
    "postcss-cssnext": {
      browsers: [
        "Android >= 4.0",
        "iOS >= 7",
        "Chrome > 31",
        "ff > 31",
        "ie >= 8",
        "last 10 versions"
      ]
    },
    'postcss-pxtorem': {
      rootValue: 37.5,
      propList: ['*'],
      exclude: /node_modules/i
    }
  }
};

这里不再需要配置autoprefixer,因为postcss-cssnext中已经集成了autoprefixer

安装eslint&prettier

安装eslint、prettier

yarn add -D eslint eslint-plugin-prettier

对vue进行代码美化

yarn add -D eslint-plugin-vue @vue/eslint-config-prettier @vue/eslint-config-typescript

对ts进行代码美化

yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser

配置 prettier

在根目录创建.prettierrc.json

{
  "semi": false, // 结尾不加分号
  "tabWidth": 2, //指定每个缩进级别的空格数
  "arrowParens": "avoid",
  "singleQuote": true, // 使用单引号
  "trailingComma": "all" //将>多行JSX元素放在最后一行的末尾
}

我们使用尤雨溪的配置,句尾不带分号 + 单引号。

集成基于jest&vtu的单元测试

安装单元测试模块 jest

yarn add jest --dev

安装 jest 自动代码提示

yarn add @types/jest --dev

运行jest脚本时,es6的语法是跑不通的,需要使用babel

生成基础配置文件

Jest 将根据你的项目提出一系列问题,并且将创建一个基础配置文件。文件中的每一项都配有简短的说明:

jest --init

此时会生成一个文件jest.config.js,并添加如下

module.exports = {
  transform: {
    '^.+\\.jsx?$': 'babel-jest', // Adding this line solved the issue
  }
}

使用 Babel

要使用 Babel,请通过 yarn 来安装所需的依赖项:

yarn add --dev babel-jest @babel/core @babel/preset-env

在项目的根目录下创建 babel.config.js ,通过配置 Babel 使其能够兼容当前的 Node 版本。

// babel.config.js
module.exports = {
  presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};

使用vue

要使用 Vue,请通过 yarn 来安装所需的依赖项:

yarn add vue-jest@next --dev

jest.config.js添加

transform: {
    //  用 `vue-jest` 处理 `*.vue` 文件
    '^.+\\.vue$': 'vue-jest',
}

还得需要安装Vue Test Utils 【Vue.js 官方的单元测试实用工具库】

yarn add @vue/test-utils@next --dev

使用typescript

要使用 typescript,请通过 yarn 来安装所需的依赖项:

yarn add ts-jest --dev

使用 yarn 安装 @babel/preset-typescript

yarn add --dev @babel/preset-typescript

然后将 @babel/preset-typescript 添加到 babel.config.js 中的 presets 列表中。

// babel.config.js
module.exports = {
  presets: [
    ['@babel/preset-env', {targets: {node: 'current'}}],
+    '@babel/preset-typescript',
  ],
};

还得需要修改tsconfig.json文件

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "lib": [
      "esnext",
      "dom"
    ],
    "types": [
      "vite/client",
+      "jest"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.d.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
+    "tests"
  ]
}

集成基于 cypress 的 e2e 测试环境

安装

yarn add cypress --dev

首次使用cypress时,需要安装cypress

npx cypress install

安装没有完全成功,执行命令重新安装

npx cypress cache clear
npx cypress install

结语

这是本人搭建vue3集成项目仓库,欢迎大家star一下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容