一、手动搭建Vue3项目

204 阅读2分钟

说明

  • node版本:16.14.2

  • 包管理工具: pnpm,7.6.0

  • 技术栈: Vue3 + TypeScript + Vite

  • 不使用vite自带的命令创建项目。

  • 只涉及项目基本框架,不涉及日常业务,如果出现业务代码也只是用于测试框架的功能,仅供参考。

项目地址:github

创建项目

1.创建文件

创建并进入空白文件夹admin-v-manage

2.生成package.json项目清单

npm init

包名输入admin-v-manage其它选项一路Enter即可。

3.创建项目目录并安装依赖

#生产依赖: vue全家桶 pinia持久化 网络请求 组件 图标 页面加载进度条
pnpm i vue vue-router pinia pinia-plugin-persistedstate axios element-plus @element-plus/icons-vue nprogress

#开发依赖: ts css预处理器
pnpm install -D typescript less

#开发依赖: vite vite编译vue文件功能 vite编译jsx文件功能 类型:使ts支持node 类型:nprogress的类型支持 vue文件类型检查工具
pnpm install -D vite @vitejs/plugin-vue @vitejs/plugin-vue-jsx @types/node @types/nprogress vue-tsc

4. 按照下面的目录树创建文件,重要页面代码如下:

admin-v-manage
├─index.html 					# 入口html
├─package.json 					# 项目清单,第2步已创建
├─src						# 项目资源文件夹
|  ├─App.vue						# 入口组件
|  ├─main.ts						# 入口ts
|  ├─views						# 页面组件文件夹
|  |   ├─user
|  |   |  └index.vue
|  |   ├─dashboard
|  |   |     └index.vue
|  |   ├─auth
|  |   |  └index.vue
|  ├─utils						# 工具函数
|  ├─styles						# 公共样式
|  |   ├─index.less					        # 公共样式入口
|  |   ├─normallize.less 		                                # 预设样式
|  |   └─vars.less						        # less变量
|  ├─store						# 仓库
|  ├─router						# 路由
|  |   └index.ts
|  ├─assets						# 静态资源
|  ├─api						# 网络请求相关

> styles/index.less
@import url('./vars.less');
@import url('./normallize.less');
> styles/normallize.less

我用的这个开源项目:minireset.css

> router/index.ts
import { RouteRecordRaw, createRouter, createWebHashHistory } from 'vue-router';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';

// 路由
const routes: Array<RouteRecordRaw> = [
	{
		path: '/',
		name: 'dashboard',
		component: () => import('../views/dashboard/index.vue'),
		meta: {},
	},
];

const router = createRouter({
	history: createWebHashHistory(), //hash模式
	routes,
});

router.beforeEach(async (to, from, next) => {
	NProgress.start();  //页面跳转前开启进度条
	next();
});

router.afterEach(() => {
	NProgress.done(); //页面跳转完成后关闭进度条
});

export default router;


> store/index.ts
import { createPinia } from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';

const pinia = createPinia();
pinia.use(piniaPluginPersistedstate); //pinia数据持久化存储

export default pinia;
> main.ts
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import pinia from './store';
import './styles/index.less';

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

到目前为止,整体项目的架子就已经搭建起来了,但是你会发现项目还是无法运行起来。这是由于vite还无法对vue模板进行编译。所以我们需要创建vite.config.ts对vite进行配置,在项目根目录下创建文件:

> vite.config.ts
import { defineConfig, loadEnv } from 'vite';
import type { UserConfig, ConfigEnv } from 'vite';
import { fileURLToPath } from 'url';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';

export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
	const root = process.cwd(); //获取当前工作目录
	const env = loadEnv(mode, root); //获取环境变量
	return {
		root, //项目根目录
		base: './', //项目部署的基础路径
		plugins: [
			// Vue模板文件编译插件
			vue(),
			// jsx文件编译插件
			vueJsx(),
		],
		// 配置别名
		resolve: {
			alias: {
				'@': fileURLToPath(new URL('./src', import.meta.url)),
				'#': fileURLToPath(new URL('./types', import.meta.url)),
			},
		},
	};
});

并在package.json文件添加如下代码:

"scripts": {
		"dev": "vite",
	},

接下来,我们运行npm run dev命令,就能启动我们创建的项目了。

下一期我们继续完善项目代码开发规范:二、集成eslint、prettier和stylelint