vite+vue3+ts从0到1搭建企业级项目(1)

简介: vite+vue3+ts从0到1搭建企业级项目

一. 初始化项目

  • 使用 NPM
npm create vite@latest
yarn create vite
  • 使用 PNPM:
pnpm create vite

根据提示进行初始化:(这里我们选用yarn进行创建项目)

进入项目目录:

cd vite-project

下载依赖:

yarn

运行项目:

yarn dev

注意:由于vue2的vscode开发插件并不能很好的满足我们vue3开发,所以我们需要更换开发插件。

  1. Volar
    使用 VSCode 开发 Vue2 时, Vetur 插件作为 Vue2 配套的 VSCode 插件,它的主要作用是对 Vue 单文件组件提供高亮、语法支持以及语法检测。
    而随着 Vue3 正式版发布,Vue 团队官方推荐 Volar 插件来代替 Vetur 插件, 不仅支持 Vue3 语言高亮、语法检测,还支持 TypeScript 和基于 vue-tsc 的类型检查功能。
    使用时需要 禁用Vetur

  2. Vue VSCode Snippets
    Vue VSCode Snippets 插件旨在 为开发者提供最简单快速的生成 Vue 代码片段的方法,通过各种快捷键就可以在 .vue文件中快速生成各种代码片段。

    此时我们就可以通过关键字快速生成代码片段 vbase :

二. 配置环境

1. 解决ts找不到模块

我们在项目创建好后可能会遇到如下问题:

解决方案:

  • 在根目录创建 shims.d.ts文件
//shims.d.ts
// 声明模块,处理以 .vue 结尾的文件
declare module "*.vue" {
  // 导入 vue 模块中的 defineComponent 函数
  import { defineComponent } from "vue";
  
  // 定义一个常量 component,类型为 defineComponent 函数的返回类型
  const component: ReturnType<typeof defineComponent>;
  
  // 导出 component 常量,使其在其他文件中可用
  export default component;
}
  • 修改 tsconfig.json文件
{
  // 编译器选项
  "compilerOptions": {
  // 定义类型声明文件的路径
  "typeRoots": [
    "node_modules/@types", // 默认路径,TypeScript 会在这里查找类型声明
    "src/types"       // 自定义路径,你可以在这里放置你的类型声明
  ],
  // 设置输出代码的 ECMAScript 目标版本
  "target": "esnext",
  // 使用 defineProperty 定义类的字段
  "useDefineForClassFields": true,
  // 设置输出模块的类型
  "module": "esnext",
  // 使用 Node.js 的模块解析策略
  "moduleResolution": "node",
  //跳过typescript对第三方依赖的类型检查
   "skipLibCheck": true,
  // 开启所有严格类型检查选项
  "strict": true,
  // 保留 JSX,不进行转换
  "jsx": "preserve",
  // 生成源映射,以便在调试时能找到原始 TypeScript 代码
  "sourceMap": true,
  // 允许从 .json 文件中导入数据
  "resolveJsonModule": true,
  // 启用 CommonJS 和 ES6 之间的模块兼容性
  "esModuleInterop": true,
  // 包括 esnext 和 DOM 库的定义
  "lib": ["esnext", "dom"],
  // 设置基础路径,用于解析模块名
  "baseUrl": "./",
  // 路径别名设置
  "paths": {
    "@": ["src"],    // '@' 指向 'src' 目录
    "@/*": ["src/*"]   // '@/xxx' 会解析到 'src/xxx'
  }
  },
  // 定义哪些文件需要被 TypeScript 编译器处理
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

此时重启vscode,错误消失:

2. 环境配置

保证 node 的使用
yarn add @types/node --save-dev
修改 vite.config.ts
// 导入 Vite 的配置方法和 Vue 插件
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
// 导入 Node.js 的 path 模块,用于处理文件路径
import * as path from 'path';
// 使用 defineConfig 方法定义 Vite 的配置
export default defineConfig({
  resolve: {
    // 设置别名,这样在项目中就可以使用 '@' 代替 'src' 路径
    alias: {
      '@': path.resolve(__dirname, 'src')
    }
  },
  plugins: [
    // 使用 Vue 插件,这样 Vite 就能处理 Vue 文件了
    vue()
  ],
  server: {
    // 设置开发服务器的端口号为 8080
    port: 8080,
    hmr: {
      // 设置 HMR(热模块替换)的主机和端口
      host: '127.0.0.1',
      port: 8080
    },
    // 设置代理,以解决跨域问题
    proxy: {
      // 使用类型断言确保环境变量是一个字符串
      // 这样 TypeScript 就不会报错了
      [process.env.VITE_APP_BASE_API as string]: {
        // 设置代理目标为 localhost:3000
        target: 'http://localhost:3000',
        // 允许改变原始主机头为目标 URL
        changeOrigin: true,
        // 重写路径:移除路径中的环境变量部分
        rewrite: (path) => path.replace(new RegExp('^' + (process.env.VITE_APP_BASE_API as string)), '')
      }
    }
  }
});
配置不同环境的接口地址

在实际开发中,由于在开发、测试、生产环境中的接口地址是不一样的,我们不可能每次在打包到不同环境前都手动去更改接口地址,这样过于麻烦并且很容易出现问题导致环境与接口不对应,此时我们就需要配置不同的环境配置文件来区别不同环境的接口地址,方便我们在后续打包时通过一行命令就打包成为我们想要的环境包。

  • 根目录创建 .env.development 开发环境 配置文件
  • 根目录创建 .env.staging 测试环境 配置文件
  • 根目录创建 .env.production 生产环境 配置文件
# 开发环境配置
VITE_ENV = 'development'
VITE_APP_BASE_API = '接口地址'
# 图片上传
VITE_APP_IMAGE_PATH='图片接口地址'
# 测试环境配置
VITE_ENV = 'staging'
VITE_APP_BASE_API = '接口地址'
VITE_APP_IMAGE_PATH='图片接口地址'
# 生产环境配置
VITE_ENV = 'production'
VITE_APP_BASE_API = '接口地址'
VITE_APP_IMAGE_PATH='图片接口地址'
pakeage.json的scripts中配置不同环境的打包命令
  • 使用 yarn build 打包
"build": "vue-tsc && vite build",
    "build:staging": "tsc --noEmit && vite build --mode staging",
    "build:production": "tsc --noEmit && vite build --mode production",

接下来使用 yarn build:staging打包测试一下,发现报错:

此报错意为 缺失 ‘@babel/types’ 模块,这是一个常见的类型定义文件,被多个库(如 @babel/parser 和 @vue/compiler-core)依赖。可以安装它来解决这个问题:

yarn add @babel/types --dev

接下来还有一个报错:

此报错意为 无法找到 ‘./App.vue’:因为 TypeScript 默认不知道如何处理 .vue 文件。可以在 vite-env.d.ts中添加如下代码:

/// <reference types="vite/client" />
declare module "*.vue" {
    import { defineComponent } from "vue";
    const component: ReturnType<typeof defineComponent>;
    export default component;
}

接下来再使用 yarn build:staging打包测试一下,打包成功:

vite+vue3+ts从0到1搭建企业级项目(2)https://developer.aliyun.com/article/1540138

目录
相关文章
|
6天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
16天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
37 7
|
17天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
39 3
|
16天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
36 1
|
16天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
37 1
|
18天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
18天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
JavaScript Java 物联网
现有vue项目seo优化
现有vue项目seo优化
|
JavaScript 前端开发
重读vue电商网站45之项目优化上线
重读vue电商网站45之项目优化上线
132 0
重读vue电商网站45之项目优化上线
|
6天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。