Vue3.0 + Vite + Ts项目配置

本系列专栏,主要用于记录Vue3.0+Vite+Ts项目的开发以及相关项目的配置,持续更新!

Vue3.0、Vite、Ts现在都是市面上主流的前端框架,学会创建项目是基础中的基础。

创建项目过程中,难免会遇到一些疑难杂症,这篇文章就详细的讲解了创建项目过程中可能会踩的坑。话不多说,发车!

文末附源码获取地址!文末附源码获取地址!文末附源码获取地址!

一、检查安装环境

确保电脑已经安装了node以及npm

-- 检查node的版本号
node -v

-- 检查npm的版本号
npm -v

二、创建项目

2.1 打开你自己的工作目录,cmd打开命令窗口

2.2 输入命令

npm init vite@latest hs-vue3-element-admin --template vue-ts

hs-vue3-element-admin:项目名称

执行后,出现一下界面就是创建成功。

三、项目基础配置

3.1 用VSCode打开项目,并安装项目依赖,检查项目能否正常运行

Ctrl + Shift + ~ 快捷键,打开运行终端

这里有些小伙伴可能会报错:XXX is not a function,大概率就是你的node版本有问题,直接升级到最新就可以。

3.2 项目配置别名

别名的配置,对于我们后续的开发是非常重要的,能帮我们省去一堆麻烦

3.2.1 安装必要的依赖

安装依赖

npm install @types/node --save-dev
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src')
    }
  }
})

3.2.2 配置tsconfig.json

这一步非常重要!非常重要!非常重要!

除了配置别名外,我们需要在这里配置baseUrl,相对路径的访问会不成功(或者文件爆红)

include:在vue文件中我们会用到各种xxx.ts,这个配置就是为了让vue识别.ts文件以及让ts识别导入的vue文件

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"],
    },
    "types": ["vite/client"]
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue"],
  "exclude": ["dist", "target", "node_modules"]
}

3.3.3 配置 vite-env.d.ts

/// <reference types="vite/client" />

// 解决Vue文件导入报红
declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}


// 支持别名路径类型识别
declare module '@/*' {
  const _default: any;
  export default _default
}

1. 在Ts文件中,导入vue文件会爆红,原因是Ts无法识别.vue后缀的文件,这里需要加上配置

2. 文件中可能无法识别到@符合,虽然能正常使用,但文件会一直爆红,看着难受

3.3.4 验证配置是否生效

App.vue

浏览器能够正常显示,配置正常。

大家可以每配置一步,然后到App.vue中验证一下,直接使用@访问,会出现什么情况,这里当做一个小疑问,留给大家自己手动去验证!

上面的所有步骤配置完,如果能直接通过Ctrl + 鼠标左键进入对应的文件,就是配置成功!

3.3 项目基础环境配置

我们通常会有两套环节:本地的测试环境以及正式的环境(也就是上线的配置)

Vue也支持多环境配置,只需要在vue项目的根目录,创建.env文件即可(与src同目录)

3.3.1 .env文件的配置

 .env 格式的命名方式可以多种多样,只需要文件开头为.env ,后面的名字你想怎样都可以,如:.env.dev/ .env.prod/ .env.test

特殊的命名方式:

  • .env.pord 打包 vue 会压缩代码
  • .env 默认 vue 配置文件
  • .env.***.local git 会忽略

3.3.2 .env文件的配置说明

.env文件我们能配置什么?怎么让项目启动的时候,启动对应的.env文件,这些我们一步一步来

1).env文件我们能配置什么?

在.env配置文件里面,我们可以定义一些想全局使用的配置,如:端口,前端访问链接等等

2)怎么访问到在.env配置的变量?

使用 import.meta.env.变量名 即可访问对应的配置属性

这里需要注意一个点,需要在 tsconfig.json 定义你的模块model属性为以下几种,否则会报错:

仅当 '--module' 选项为 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 时,才允许使用 'import.meta' 元属性。

但是,在 tsconfig.json 定义之后,可能会衍生出另外一个问题,上面的 vite-env.d.ts 配置中,下面的引用报错了

import type { DefineComponent } from 'vue'

报错信息:

找不到模块“vue”。你的意思是要将 "moduleResolution" 选项设置为 "nodenext",还是要将别名添加到 "paths" 选项中?

这个报错,需要我们在 tsconfig.json,加入配置属性:"moduleResolution": "node",

所以 tsconfig.json 的完整配置:

{
  "compilerOptions": {
    "module": "esnext",
    "target": "esnext",
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"],
    }
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue", "types/**/*.d.ts",],
}
3)怎么让对应的.env文件生效

在 package.json 中,我们可以修改scripts属性的配置,方便我们在启动环境的时候,指定对应的配置文件

先来区分两个命令:
build:顾名思义,就是打包
serve:服务,就是我们前面说的,启动项目使用

两个命令后面接的配置,就是 .env.xxx中 xxx 的名字
如:.env.test   build:test serve:test

4)例子演示

在项目下创建了两个.env配置文件:

package.json

  "scripts": {
    "dev": "vite",
    "build": "vue-tsc -b && vite build",
    "preview": "vite preview",
    "build:test": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode test",
    "serve:test": "vite preview --mode test",
    "build:prod": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode prod",
    "serve:prod": "vite preview --mode prod"
  }

.env.test

#请求路径
VITE_API_BASE_URL= 'http://localhost:8888'

# 前端启动端口
VITE_PORT=7778

.env.prod

#请求路径
VITE_BASE_URL= 'http://localhost:8788'

# 前端启动端口
VITE_PORT='8789'

HelloWorld.vue加打印:

启动项目分别验证:

npm run serve:test 在运行这个命令前,我们必须先试用 npm run build:test 构建项目,否则会报错

说明的确是打包了我们的.env.test配置文件

说明:

npm run build:test 打包项目,会生成 dist 目录,而且 并不会打包.env.test配置文件,而是会自动将文件中以VITE开头的变量,自动注入到环境。

四、整个项目的配置以及项目获取地址

4.1 package.json

{
  "name": "hs-vue3-element-admin-manger",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite --mode test",
    "build": "vue-tsc -b && vite build",
    "preview": "vite preview",
    "build:test": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode test",
    "serve:test": "vite preview --mode test",
    "build:prod": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode prod",
    "serve:prod": "vite preview --mode prod"
  },
  "dependencies": {
    "vue": "^3.5.18"
  },
  "devDependencies": {
    "@types/node": "^24.3.0",
    "@vitejs/plugin-vue": "^6.0.1",
    "@vue/tsconfig": "^0.7.0",
    "typescript": "~5.8.3",
    "vite": "^7.1.2",
    "vue-tsc": "^3.0.5"
  }
}

4.2 tsconfig.json

{
  "compilerOptions": {
    "module": "esnext",
    "target": "esnext",
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"],
    }
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue", "types/**/*.d.ts",],
}

4.3 vite.config.ts

import { UserConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import { loadEnv, ConfigEnv } from 'vite'


// https://vite.dev/config/
// export default defineConfig({
//   plugins: [vue()],
//   resolve: {
//     alias: {
//       '@': path.resolve(__dirname, 'src')
//     }
//   },
//   server: {
//     port: import.meta.env.VITE_PORT
//   }
// })
export default ({mode}: ConfigEnv): UserConfig => {
  let env = {} as any
  env = loadEnv(mode, process.cwd());

  return {
    plugins: [vue()],
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src')
      }
    },
    server: {
      port: env.VITE_PORT
    }
  }
}

4.4 App.vue

<script setup lang="ts">
import HelloWorld from '@/components/HelloWorld.vue'
</script>

<template>
  <div>
    <a href="https://vite.dev" target="_blank">
      <img src="/vite.svg" class="logo" alt="Vite logo" />
    </a>
    <a href="https://vuejs.org/" target="_blank">
      <img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
    </a>
  </div>
  <HelloWorld msg="Vite + Vue" />
</template>

<style scoped>
.logo {
  height: 6em;
  padding: 1.5em;
  will-change: filter;
  transition: filter 300ms;
}
.logo:hover {
  filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
  filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

4.5 HelloWorld.vue

<script setup lang="ts">
import { ref } from 'vue'

defineProps<{ msg: string }>()

const count = ref(0)

const test = () => {
  console.log(import.meta.env.VITE_API_BASE_URL);
}

</script>

<template>
  <h1>{{ msg }}</h1>

  <div class="card">
    <button type="button" @click="test">count is {{ count }}</button>
    <p>
      Edit
      <code>components/HelloWorld.vue</code> to test HMR
    </p>
  </div>

  <p>
    Check out
    <a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
      >create-vue</a
    >, the official Vue + Vite starter
  </p>
  <p>
    Learn more about IDE Support for Vue in the
    <a
      href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support"
      target="_blank"
      >Vue Docs Scaling up Guide</a
    >.
  </p>
  <p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>

<style scoped>
.read-the-docs {
  color: #888;
}
</style>

好了,Vue3.0项目的创建以及相关的基础配置大概就这么多!列车到站!

我是写代码的小和尚,平时喜欢写写博客,如果我的文章对您有所帮助,麻烦点赞收藏一下吧!让更多的人看见,谢谢大家!  

源码获取地址:https://pan.quark.cn/s/bb1a9c6c967b

修复说明:

1 .env.test配置有误,修改一下(2025.08.29)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值