一、使用Vue Cli创建Vue3+TS项目
1、在桌面新建一个temp文件夹,然后在VS Code打开,打开一个终端,查看一下node、npm、vuecli的版本;
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS C:\Users\Administrator\Desktop\temp>
PS C:\Users\Administrator\Desktop\temp> node -v
v16.17.1
PS C:\Users\Administrator\Desktop\temp> npm -v
9.2.0
PS C:\Users\Administrator\Desktop\temp> vue -V
@vue/cli 5.0.8
PS C:\Users\Administrator\Desktop\temp>
2、创建一个 Vue 项目,按上下方向键来选择,此处选第三个,手动选择特性,然后回车确认;
vue create vue3_ts_less_element_plus
Vue CLI v5.0.8
? Please pick a preset:
Default ([Vue 3] babel, eslint) // 创建一个带有babel, eslint插件的Vue 3项目
Default ([Vue 2] babel, eslint) // 创建一个带有babel, eslint插件的Vue 2项目
> Manually select features // 手动选择特性
3、添加所需插件,按空格键进行选择,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)er> to proceed)
(*) Babel // JS编译器
(*) TypeScript // TypeScript扩展
( ) Progressive Web App (PWA) Support // 渐进式Web应用程序
(*) Router // Vue路由
(*) Vuex // Vue状态管理器
>(*) CSS Pre-processors // CSS 预处理器(如:less、sass)
( ) Linter / Formatter // 代码风格检查和格式化,这家伙太严谨了,一般不选(如:ESlint)
( ) Unit Testing // 单元测试
( ) E2E Testing // E2E(end to end)测试
4、选择Vue版本,按上下方向键来选择,此处选择 3.x ,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with (Use arrow keys)
> 3.x
2.x
5、是否使用Class风格装饰器,此处输入 y,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with 3.x
? Use class-style component syntax? Yes
6、是否使用Babel和TS,此处输入 y,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with 3.x
? Use class-style component syntax? Yes
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes
7、选择路由模式,此处输入 n,即使用默认的 hash 模式,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with 3.x
? Use class-style component syntax? Yes
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes
? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n) n
8、选择CSS预处理器,按上下方向键来选择,笔者习惯用Less,无所谓咯,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with 3.x
? Use class-style component syntax? Yes
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default):
Sass/SCSS (with dart-sass)
> Less
Stylus
9、Babel、ESLint等插件的配置是单独的文件进行配置,还是都在package.json文件里面,此处输选择package.json咯,并不想太多零散的配置文件,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with 3.x
? Use class-style component syntax? Yes
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): Less
? Where do you prefer placing config for Babel, ESLint, etc.?
In dedicated config files
> In package.json
10、是否保存当前创建Vue项目的配置信息,下次再创建Vue项目的时候,可以选择该特性,回车确认即可创建,那就保存一下咯;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with 3.x
? Use class-style component syntax? Yes
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): Less
? Where do you prefer placing config for Babel, ESLint, etc.? In package.json
? Save this as a preset for future projects? (y/N) y
11、对创建Vue项目的配置信息进行保存,以便下次选择,输入名称,然后回车确认;
Vue CLI v5.0.8
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)? Check the features needed for your project: Babel, TS, Router, Vuex, CSS Pre-processors
? Choose a version of Vue.js that you want to start the project with 3.x
? Use class-style component syntax? Yes
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): Less
? Where do you prefer placing config for Babel, ESLint, etc.? In package.json
? Save this as a preset for future projects? Yes
? Save preset as: vue3_ts_less_element_plus
12、等待片刻,项目刷刷刷地创建完成了;
Vue CLI v5.0.8
✨ Creating project in C:\Users\Administrator\Desktop\temp\vue3_ts_less_element_plus.
🗃 Initializing git repository...
⚙️ Installing CLI plugins. This might take a while...
added 864 packages in 28s
91 packages are looking for funding
run `npm fund` for details
🚀 Invoking generators...
📦 Installing additional dependencies...
added 35 packages in 18s
94 packages are looking for funding
run `npm fund` for details
⚓ Running completion hooks...
📄 Generating README.md...
🎉 Successfully created project vue3_ts_less_element_plus.
👉 Get started with the following commands:
$ cd vue3_ts_less_element_plus
$ npm run serve
PS C:\Users\Administrator\Desktop\temp>
二、整合Element Plus框架
1、接以上的步骤,在VS Code终端进入刚创建好的项目 vue3_ts_less_element_plus 的目录,以及运行一下项目;
cd vue3_ts_less_element_plus
npm run serve
启动成功如下所示
DONE Compiled successfully in 4852ms 10:03:09
App running at:
- Local: http://localhost:8080/
- Network: http://IP:8080/
Note that the development build is not optimized.
To create a production build, run npm run build.
2、在键盘按下ctrl + c,并输入 y,可以停止该服务;
终止批处理操作吗(Y/N)? y
PS C:\Users\Administrator\Desktop\temp\vue3_ts_less_element_plus>
3、配置支持输入 npm start 进行项目启动,在 package.json 文件加上 “start”: “npm run serve” 代码,之后就可以输入 npm start 进行项目启动了,如下所示;
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"start": "npm run serve"
},
启动成功如下所示
PS C:\Users\Administrator\Desktop\temp\vue3_ts_less_element_plus> npm start
INFO Starting development server...
DONE Compiled successfully in 2891ms 10:13:51
App running at:
- Local: http://localhost:8080/
- Network: http://IP:8080/
Note that the development build is not optimized.
To create a production build, run npm run build.
4、 整合Element Plus框架;
第一步:导入依赖包
npm i element-plus
第二步:在项目的 src 目录新建 plugins 文件夹,里面再新建 element-plus.ts 文件,写入以下代码
import ElementPlus from 'element-plus'
import 'element-plus/theme-chalk/index.css'
import zhCn from 'element-plus/es/locale/lang/zh-cn' // 汉化 element-plus 组件
export default (app: any) => {
app.use(ElementPlus, {
locale: zhCn,
})
}
第三步:在项目的 main.ts 文件夹引入和使用该插件和注册图标,即整合完成,main.ts 文件如下所示
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
const app = createApp(App)
// 引入 ElementPlus 插件(npm i element-plus)
import ElementPlusPlugin from '@/plugins/element-plus'
// 全局注册 ElementPlus 图标组件(npm install @element-plus/icons-vue)
import * as ElementPlusIcons from '@element-plus/icons-vue'
for(const [key, component] of Object.entries(ElementPlusIcons)) {
app.component(key, component)
}
app
.use(store)
.use(router)
.use(ElementPlusPlugin)
.mount('#app')
第四步:验证整合成功,在项目的 App.vue 文件夹,例如写个按钮标签,保存即可看到效果,App.vue 文件如下所示
<template>
<!-- <nav>
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</nav> -->
<div>
<el-button
size="large"
icon="Download"
type="primary"
plain
circle
>
</el-button>
<router-view />
</div>
</template>
<style lang="less">
* {
margin: 0;
padding: 0;
}
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
border: none;
}
#app {
width: 100%;
height: 100%;
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
}
</style>
三、封装使用Axios插件
1、 封装Axios网络请求库;
第一步:导入 axios 和 nprogress 依赖包
npm i axios
npm i nprogress
npm i --save-dev @types/nprogress
第二步:在 src 目录新建 utils 文件夹,再新建 requestUtil.ts 文件,写上以下代码
import axios from 'axios'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import { ElMessage } from 'element-plus'
const http = axios.create({
baseURL: '',
timeout: 300 * 1000, // 请求超时时间设置为300秒
})
const NETWORK_ERROR = '网络错误,请联系开发人员'
/**
* 请求拦截器
*/
http.interceptors.request.use((req) => {
console.log('请求拦截器 =>', req)
Nprogress.start()
return req;
}, (error) => {
Nprogress.done()
return Promise.reject(error);
});
/**
* 响应拦截器
*/
http.interceptors.response.use(function (res) {
console.log('响应拦截器 =>', res)
Nprogress.done()
if (res.status == 200) {
return res.data
} else {
ElMessage.error((NETWORK_ERROR))
return Promise.reject(NETWORK_ERROR)
}
});
export default http
第三步:在 src 目录新建 api 文件夹,里面再新建 UserManage 文件夹,里面再新建 index.ts 文件,写上以下代码
import http from '@/utils/requestUtil'
export default {
/**
* 根据用户ID查询用户信息
*/
getUserById(userId: any) {
return http.get(`/v1/api/getUserById?userId=${userId}`)
},
/**
* 保存用户信息
*/
saveUser(data: any) {
return http.post(
'/v1/api/saveUser',
data,
{
headers: {
'Content-Type': 'application/json'
},
}
)
},
}
第四步:在 main.ts 文件引入HTTP请求工具并配置为全局方法
// 引入HTTP请求工具并配置为全局方法
import axios from 'axios'
import UserManage_Api from '@/api/UserManage/index'
app.config.globalProperties.$http = {
...UserManage_Api,
}
app.config.globalProperties.$axios = axios
2、接口请求示例;
第一步:在 vue.config.js 文件配置Api接口请求的服务端主机和端口,如下所示
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
chainWebpack(config) {
config.plugin('html').tap((args) => {
args[0].title = '帅龍之龍'
return args
})
},
devServer: {
// host: '0.0.0.0', // 主机
// port: 8080, // 端口
hot: true, // 启用热更新
https: false, // 是否开启 HTTPS 模式访问
open: false, // 当项目启动后是否立即在浏览器打开
proxy: {
// 项目 v1 的服务端接口地址
'/v1/api': {
target: 'http://127.0.0.1:8091/',
changeOrigin: true,
secure: false,
ws: true
},
// 项目 v2 的服务端接口地址
'/v2/api': {
target: 'http://127.0.0.1:8092/',
changeOrigin: true,
secure: false,
ws: true
},
// 项目 v3 的服务端接口地址
'/v3/api': {
target: 'http://127.0.0.1:8093/',
changeOrigin: true,
secure: false,
ws: true
},
// // 默认服务端接口地址
// '/': {
// target: 'http://127.0.0.1:8090/',
// changeOrigin: true,
// secure: false,
// ws: true
// }
}
}
})
第二步:在 App.vue 文件加上接口请求代码,如下所示
<template>
<div>
<el-button size="large" icon="Download" type="primary" plain circle />
<p>{{ content }}</p>
<router-view />
</div>
</template>
<script>
export default {
data: () => ({
content: ''
}),
created() {
this.getUserById(10001)
},
methods: {
/**
* 根据用户ID查询用户信息
*/
async getUserById(userId) {
// http://127.0.0.1:8080/v1/api/getUserById?userId=10001
const res = await this.$http.getUserById(userId)
if (res.success) {
this.content = res.data
} else {
this.$message({
type: 'error',
message: res.msg,
duration: 2000
})
}
},
}
}
</script>
<style lang="less">
* {
margin: 0;
padding: 0;
}
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
border: none;
}
#app {
width: 100%;
height: 100%;
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
}
</style>
到此,使用VS Code创建Vue3+TS项目并整合Element Plus框架以及封装使用Axios插件的工作已全部完成。接下来就像Vue2整合其他插件的方式整合一些需要的插件到Vue3项目中。
例如以下文章:
基于 Vue2.X/Vue3.X 项目引入 vue-code-diff/v-code-diff 代码差异插件并使用_帅龍之龍的博客-CSDN博客_vue3引入diff库
Vue3项目打包时开启 Gzip 压缩和移动端调试时开启 vConsole 调试_帅龍之龍的博客-CSDN博客_vue3 vconsole
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/151136.html