vite+vue3.0+ts+element-plus快速搭建项目的实现


Posted in Vue.js onJune 24, 2021

vite 出了 2.x 版本,抱着学一学的心态决定出个简单的项目,结合 element-plus,以及将会成为每位前端必会的 typescript,实现了如下内容。

vite是一个由原生 ESM 驱动的 Web 开发构建工具。在开发环境下基于浏览器原生 ES imports 开发,在生产环境下基于 Rollup 打包。

vite 作用

  • 快速的冷启动:不需要等待打包操作;
  • 即时的热模块更新:替换性能和模块数量的解耦让更新飞起;
  • 真正的按需编译:不再等待整个应用编译完成,这是一个巨大的改变。

使用的环境

  • node v12.19.0
  • @vue/cli 4.5.8

搭建项目

npm init vite-app <project-name>
cd <project-name>
npm install
npm run dev

yarn create vite-app <project-name>
cd <project-name>
yarn
yarn dev

配置

vite.config.ts

vite.config.ts 相当于 @vue-cli 项目中的 vue.config.js

import path from "path";

const pathResolve = (pathStr: string) => {
  return path.resolve(__dirname, pathStr);
}

const config = {
  base: './',//在生产中服务时的基本公共路径。@default '/'
  alias: {
    '/@/': pathResolve('./src'),
  },
  outDir: 'vite-init',//构建输出将放在其中。会在构建之前删除旧目录。@default 'dist'
  minify: 'esbuild',//构建时的压缩方式
  hostname: 'localhost',//本地启动的服务地址
  port: '8800',//服务端口号
  open: false,//启动服务时是否在浏览器打开
  https: false,//是否开启https
  ssr: false,//是否服务端渲染
  optimizeDeps: {// 引入第三方的配置
    include: ['axios']
  },
  // proxy: {//代理配置
  //   '/api': {
  //     target: 'http://xx.xx.xx.xx:xxxx',
  //     changeOrigin: true,
  //     ws: true,
  //     rewrite: (path: string) => { path.replace(/^\/api/, '') }
  //   }
  // }
}
module.exports = config;

tsconfig.json

{
  "compilerOptions": {
    "target": "ES5",//指定ECMAScript的目标版本:'ES3'(默认),'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020',或'ESNEXT'。
    "module": "commonjs",//指定模块代码生成:'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020',或'ESNext'。
    "strict": true,//是否启用所有严格的类型检查选项。
    "baseUrl":"./",//用于解析非绝对模块名称的基本目录。
    "paths": {
      "/@/*": ["./src/*"]
    },  
    "noImplicitAny": true, //对于隐含有'any'类型的表达式和声明引发错误。
    "esModuleInterop": true, //通过为所有导入创建名称空间对象,实现CommonJS和ES模块之间的互操作性。意味着“allowSyntheticDefaultImports”。
    "experimentalDecorators": true, //支持对ES7装饰器的实验性支持。
    "skipLibCheck": true, //跳过声明文件的类型检查。
    "forceConsistentCasingInFileNames": true //禁止对同一文件使用大小写不一致的引用。
  }
}

App.vue

修改app.vue

<template>
  <img alt="Vue logo" src="./assets/logo.png" />
  <router-view />
</template>

<script>
export default {
  name: 'App',
  setup() {

  }
}
</script>

Views

在 src 下新建 views文件夹,并在文件夹内创建 index.vue

<template>
  <HelloWorld :msg="msg"></HelloWorld>
</template>

<script lang="ts">
import HelloWorld from "/@/views/HelloWorld.vue";
import { defineComponent } from "vue";
export default defineComponent({
  name: "Home",
  components: { HelloWorld },
  setup() {
    return {
      msg: "hello World",
    };
  },
});
</script>

PS:在引入.vue文件时一定要带上后缀名,否则会报找不到文件

在views文件夹内创建 HelloWorld.vue

<template>
  <h1>{{ msg }}</h1>
  <button @click="realTime.count++">count is: {{ realTime.count }}</button>
  <button @click="handleclick">点击跳转其它路由</button>
  <p>Edit <code>components/HelloWorld.vue</code> to test hot module replacement.</p>
</template>

<script>
import { defineComponent, reactive } from "vue";
import { useRouter } from 'vue-router'
export default defineComponent({
  name: 'Index',
  props: { msg: { type: String, default: '欢迎来到vue3' } },
  setup(props) {
    const router = useRouter();
    let realTime = reactive({ count: 0 });

    function handleclick() {
      router.push({ path: '/other' })
    }
    return {
      msg: props.msg,
      realTime,
      handleclick
    }
  }
})
</script>

router

在 src 下新建 router 文件夹,并在文件夹内创建 index.ts

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    component: () => import("/@/views/index.vue")
  },
]

export default createRouter({
  history: createWebHistory(),
  routes
})

main.ts

把原本的main.js改为main.ts,修改后别忘记把index.html里面也改为main.ts

import { createApp } from 'vue'
import router from './router/index'
import App from './App.vue'
import ElementPlus from 'element-plus'

import 'element-plus/lib/theme-chalk/index.css'
import './reset.css'

const app = createApp(App);
app.use(ElementPlus);
app.use(router);
app.mount('#app');

细心的同学这时可能已经发现:在 ts 文件中引入 .vue 文件时出现以下报错,但是不影响代码正常运行

vite+vue3.0+ts+element-plus快速搭建项目的实现

报错原因:typescript 只能理解 .ts 文件,无法理解 .vue文件

解决方法:在项目根目录或 src 文件夹下创建一个后缀为 .d.ts 的文件,并写入以下内容:

declare module '*.vue' { }
declare module '*.js'
declare module '*.json';
declare module '*.svg'
declare module '*.png'
declare module '*.jpg'
declare module '*.jpeg'
declare module '*.gif'
declare module '*.bmp'
declare module '*.tiff'

至此项目搭建完成,可以愉快的写代码了。

到此这篇关于vite+vue3.0+ts+element-plus快速搭建项目的实现的文章就介绍到这了,更多相关vite+vue3.0+ts+element-plus搭建内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
在Vue中使用mockjs代码实例
Nov 25 Vue.js
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
vue动态设置路由权限的主要思路
Jan 13 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
vue3种table表格选项个数的控制方法
Apr 14 Vue.js
vue-router中hash模式与history模式的区别
Vue-Element-Admin集成自己的接口实现登录跳转
Vue + iView实现Excel上传功能的完整代码
Vue vee-validate插件的简单使用
Jun 22 #Vue.js
vue3使用vue-router的完整步骤记录
一篇文章学会Vue中间件管道
Jun 20 #Vue.js
Vue过滤器(filter)实现及应用场景详解
You might like
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
解析isset与is_null的区别
2013/08/09 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JS高级运动实例分析
2016/12/20 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
谈谈python中GUI的选择
2018/03/01 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
公司门卫岗位职责范本
2014/07/08 职场文书
民事诉讼代理委托书
2014/10/08 职场文书