vite+typescript从入门到实战(一)

简介: vite+typescript从入门到实战

vite官网
兼容性注意
Vite 需要
Node.js 版本 >= 12.0.0


项目创建:要构建一个 Vite + Vue 项目,运行:  

# npm 6.x
npm init @vitejs/app my-vue-app --template vue

# npm 7+, 需要额外的双横线:
npm init @vitejs/app my-vue-app -- --template vue

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

支持的模板预设包括:

  • vanilla
  • vue
  • vue-ts
  • react
  • react-ts
  • preact
  • preact-ts
  • lit-element
  • lit-element-ts
    查看 @vitejs/create-app 获取每个模板的更多细节。

初始化

npm init vite@latest

创建完成后选择 vue-ts安装依赖

npm i

安装UI组件库

npm i @nutui/nutui@next

安装路由

npm install vue-router@4

安装vuex

npm install vuex@next --save

新建页面 配置路由


路由meta对象参数说明

/**
 * 路由meta对象参数说明
 * meta: {
 *      title:          菜单栏及 tagsView 栏、菜单搜索名称(国际化)
 *      isLink:        是否超链接菜单,开启外链条件,`1、isLink:true 2、链接地址不为空`
 *      isHide:        是否隐藏此路由
 *      isKeepAlive:   是否缓存组件状态
 *      isAffix:       是否固定在 tagsView 栏上
 *      isIframe:      是否内嵌窗口,,开启条件,`1、isIframe:true 2、链接地址不为空`
 *      roles:         当前路由权限标识,取角色管理。控制路由显示、隐藏。超级管理员:admin 普通角色:common
 *      icon:          菜单、tagsView 图标,阿里:加 `iconfont xxx`,fontawesome:加 `fa xxx`
 * }
 */

引入路由

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
const dynamicRoutes: Array<RouteRecordRaw> = [
    {
        path: '/',
        name: '/',
        component: () => import('@/layout/index.vue'),
        redirect: '/home',
        meta: {
            isKeepAlive: true,
        },
        children: [
            {
                path: '/home',
                name: 'home',
                component: () => import('@/views/Index/index.vue'),
                meta: {
                    title: 'message.router.home',
                    isLink: '',
                    isHide: false,
                    isKeepAlive: true,
                    isAffix: true,
                    isIframe: false,
                    icon: 'iconfont icon-shouye',
                },
            },
        ],
    },
];

const router = createRouter({
    history: createWebHashHistory(),
    routes: dynamicRoutes,
});

// 导出路由
export default router;

main.ts配置路由

import router from './router';
const app = createApp(App);


app
.use(router)
.mount('#app');

引入UI组件库(这里用的是 京东的 nutUI)

import { createApp } from 'vue'
import App from './App.vue'

import router from './router';
const app = createApp(App);

import NutUI from "@nutui/nutui";
import "@nutui/nutui/dist/style.css";
app
.use(router)
.use(NutUI)
.mount('#app');

配置App.vue

<template>
  <router-view />
</template>

新建页面 Index、User

@/views/Index/index.vue
@/views/User/index.vue

新建Layout组件

<template>
  <nut-tabbar :bottom="true" :safeAreaInsetBottom="true" @tab-switch="tabSwitch">
    <nut-tabbar-item tab-title="首页" to="/home" icon="home" num="11"></nut-tabbar-item>
    <nut-tabbar-item tab-title="分类" icon="category"></nut-tabbar-item>
    <nut-tabbar-item tab-title="发现" icon="find"></nut-tabbar-item>
    <nut-tabbar-item tab-title="商城" icon="cart" num="110"></nut-tabbar-item>
    <nut-tabbar-item tab-title="我的" to="/userCenter" icon="my"></nut-tabbar-item>
    
  </nut-tabbar>
  <!-- 主内容区域 -->
  <div class="main-content">
      <router-view />
  </div>
</template>

<script setup lang="ts">
//tab点击事件
const tabSwitch = (v:String):any=>{
    console.log(v)
}

</script>

<style scoped>
.main-content{
    height:calc(100% - 48px);
}

</style>

页面路由跳转可以使用  <nut-tabbar-item  里面的 to 属性

<nut-tabbar-item tab-title="我的" to="/userCenter" icon="my"></nut-tabbar-item>


shim.d.ts文件


主要内容

/* eslint-disable */

/**
* shims-vue.d.ts的作用
* 为了 typescript 做的适配定义文件,因为.vue 文件不是一个常规的文件类型,ts 是不能理解 vue 文件是干嘛的,
* 加这一段是是告诉 ts,vue 文件是这种类型的。
* 可以把这一段删除,会发现 import 的所有 vue 类型的文件都会报错。
*/

// 声明文件,*.vue 后缀的文件交给 vue 模块来处理
declare module '*.vue' {
  import type { DefineComponent } from 'vue';
  const component: DefineComponent<{}, {}, any>;
  export default component;
}

// 声明文件,定义全局变量。其它 app.config.globalProperties.xxx,使用 getCurrentInstance() 来获取
interface Window {
  nextLoading: boolean;
}

shims-vue.d.ts是为了 typescript 做的适配定义文件,因为.vue 文件不是一个常规的文件类型,ts 是不能理解 vue 文件是干嘛的,
加这一段是是告诉 ts,vue 文件是这种类型的。
这一段删除,会发现 import 的所有 vue 类型的文件都会报错。


引入vue-echarts(在.d.ts文件中)

/**
 * shims-vue.d.ts的作用
 * 为了 typescript 做的适配定义文件,因为.vue 文件不是一个常规的文件类型,ts 是不能理解 vue 文件是干嘛的,
 * 加这一段是是告诉 ts,vue 文件是这种类型的。
 * 可以把这一段删除,会发现 import 的所有 vue 类型的文件都会报错。
 */

declare module '*.vue' { //declare声明宣告, 声明一个ambient module(即:没有内部实现的 module声明) 
  import Vue from 'vue'
  export default Vue
}

declare module 'vue-echarts'  // 引入vue-echarts

以下方式可能产生报错

<script lang="ts">
    /* eslint-disable @typescript-eslint/camelcase */
    import { Vue, Component, Watch } from 'vue-property-decorator'
    import ECharts from 'vue-echarts' //报错,按上面的方法在shims-vue.d.ts文件中引入即可
    import 'echarts/lib/chart/line'
    import 'echarts/lib/chart/pie'
    import 'echarts/lib/component/tooltip'
</script>

source.d.ts 文件

使用模块声明导入文件(导入文件类型定义)

declare module '*.json';
declare module '*.png';
declare module '*.jpg';
declare module '*.scss';
declare module '*.ts';
declare module '*.js';

因为在typescript里面使用以下的语句 很可能报错,
Cannot find module 'xxx.json'
解决办法,可以在根目录建立一个typings.d.ts文件

declare module "*.json" {
    const value: any;
    export default value;
}

然后就可以通过下面的方式使用

import * as data from './xxx.json';
const word = (<any>data).name;

Vite.config.ts 文件


UserConfig

配置跨域

import type { UserConfig } from 'vite';

const viteConfig:UserConfig = {
    port: 8080,
    hostname: "localhost",
    proxy: {
        '/api': {
            target: 'http://zhanhongzhu.top',
            changeOrigin: true,
            ws: true,
            rewrite: path => path.replace(/^\/api/, '')
        }
    }
}
//导出
export default viteConfig;

其他配置项

/**
 * vite总配置文件
 */
const path = require('path');
import type { UserConfig } from 'vite';
//
const viteConfig: UserConfig = {
    // 端口号(默认3000)
    port: 8080,
    // 是否自动打开浏览器(默认false)
    open: true,
    // 是否开启 https
    // https: false,
    // 服务端渲染
    // ssr: false,
    // 引入第三方的配置
    // optimizeDeps: {
    //     include: ["moment", "echarts", "axios", "mockjs"]
    // },
    // 生产环境路径,类似webpack的assetsPath
    base: './',
    // 打包后目录,默认dist
    outDir: 'www',
    // 别名配置
    alias: {
        // 键必须以斜线开始和结束
        '/@/': path.resolve(__dirname, './src')
    },
    // 代理配置
    port: 8080,
    hostname: "localhost",
    proxy: {
        '/api': {
            target: 'http://zhanhongzhu.top',
            changeOrigin: true,
            ws: true,
            rewrite: path => path.replace(/^\/api/, '')
        }
    }
}

//
export default viteConfig;


vite+typescript从入门到实战(二):https://developer.aliyun.com/article/1483572

相关文章
|
12月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
2682 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
10月前
|
JavaScript 前端开发 安全
TypeScript 终极入门指南:从零到精通 🚀
TypeScript是JavaScript的超集,添加静态类型系统,提升代码健壮性与可维护性。本教程涵盖基础类型、高级特性、面向对象编程及最佳实践,配代码示例与图解,助你快速掌握TS核心概念,轻松进阶前端开发!🎉
966 2
TypeScript 终极入门指南:从零到精通 🚀
|
自然语言处理 JavaScript 前端开发
一夜获千星!已获 1.7k+,Art Design Pro:Vue3 + Vite + TypeScript 打造的高颜值管理系统模板,这个让后端小哥直呼救命的后台系统
Art Design Pro 是一款基于 Vue 3、Vite 和 TypeScript 的高颜值后台管理系统模板,已获 1.7k+ 星标。项目专注于用户体验与视觉设计,支持主题切换、多语言、权限管理及图表展示等功能,内置常用业务组件,便于快速搭建现代化管理界面。其技术栈先进,开发体验流畅,适配多设备,满足企业级应用需求。项目地址:[GitHub](https://github.com/Daymychen/art-design-pro)。
2367 11
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
898 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
|
JavaScript 数据管理 编译器
揭秘 ArkTS 与 TypeScript 的神秘差异:鸿蒙系统开发者的必备知识与实战技巧
【10月更文挑战第18天】ArkTS 是华为为鸿蒙系统(HarmonyOS)推出的开发语言,作为 TypeScript 的超集,它针对鸿蒙系统的分布式特性和需求进行了优化和扩展。ArkTS 强化了分布式数据管理、类型系统、编译与运行时性能,并支持声明式 UI 和专为鸿蒙设计的 API,使开发者能够更高效地开发跨设备协同工作的应用。
1311 6
|
JavaScript 前端开发 编译器
【小白入门】 浏览器如何识别Typescript?
【10月更文挑战第1天】浏览器如何识别Typescript?
|
资源调度 JavaScript 前端开发
TypeScript实战教程(一):表单上传与后端处理
本文是TypeScript实战教程的第一部分,介绍了使用TypeScript进行表单上传和后端处理的完整流程,包括环境配置、前端表单创建、使用TypeScript和Express框架搭建服务端、处理表单数据,并提供了详细的代码示例和运行测试方法。
TypeScript实战教程(一):表单上传与后端处理
|
JavaScript 前端开发 编译器
TypeScript,从0到入门带你进入类型的世界
该文章提供了TypeScript的入门指南,从安装配置到基础语法,再到高级特性如泛型、接口等的使用,帮助初学者快速掌握TypeScript的基本用法。
|
JavaScript 前端开发 编译器
三个小时vue3.x从零到实战(typescript的搭建、使用及资料)
该文章介绍了如何在Vue 3项目中集成TypeScript,包括TypeScript的安装、基本使用,以及如何通过TypeScript增强Vue应用程序的类型安全性。
561 0
|
前端开发 JavaScript 安全
【前端开发新境界】React TypeScript融合之路:从零起步构建类型安全的React应用,全面提升代码质量和开发效率的实战指南!
【8月更文挑战第31天】《React TypeScript融合之路:类型安全的React应用开发》是一篇详细教程,介绍如何结合TypeScript提升React应用的可读性和健壮性。从环境搭建、基础语法到类型化组件、状态管理及Hooks使用,逐步展示TypeScript在复杂前端项目中的优势。适合各水平开发者学习,助力构建高质量应用。
521 0