1. 环境准备:从零搭建开发环境
刚接触Web开发时,环境配置往往是第一个拦路虎。我至今记得第一次安装Node.js时,因为没配置环境变量导致命令行报错的尴尬。下面我会用最直白的语言,带你避开这些坑。
1.1 安装VSCode:你的代码编辑器
Visual Studio Code(简称VSCode)是微软推出的免费编辑器,就像作家的钢笔一样重要。安装时有个小技巧:建议勾选"添加到PATH"选项,这样以后在任意文件夹右键都能直接用VSCode打开。我习惯把安装路径设为D:\DevTools\VSCode,避免C盘空间被占用。
安装完成后,按Ctrl+Shift+X打开扩展市场,推荐先安装这几个必备插件:
- Chinese (Simplified) Language Pack:中文界面
- ESLint:代码质量检查
- Prettier:自动格式化代码
- Live Server:实时预览网页效果
1.2 Node.js安装与配置
Node.js相当于后台开发的发动机,官网提供了LTS(长期支持版)和Current(最新版)两个版本。新手建议选择LTS版,就像选择手机系统的稳定版而不是开发者预览版。
安装时注意这两个细节:
- 不要装在中文路径下(比如
D:\软件\nodejs可能出问题) - 务必勾选"Automatically install the necessary tools"选项
安装完成后,打开终端(Windows按Win+R输入cmd)依次输入:
node -v # 应该显示类似v18.16.0的版本号 npm -v # 这是Node自带的包管理器版本如果提示"不是内部命令",说明环境变量没自动配置。这时需要手动添加Node.js安装路径(比如C:\Program Files\nodejs)到系统环境变量的Path中。
2. 项目初始化:创建你的第一个后台项目
2.1 脚手架工具的选择
就像盖房子需要脚手架,我们常用vue-cli或vite来快速生成项目骨架。2023年开始我更推荐vite,它的启动速度比传统工具快10倍以上。安装命令很简单:
npm create vite@latest my-admin --template vue这条命令会:
- 创建一个名为my-admin的文件夹
- 使用vue模板初始化项目
- 自动生成基础目录结构
2.2 目录结构解析
生成的目录中这几个文件最关键:
src/main.js:应用入口文件,相当于大楼的地基src/App.vue:根组件,类似建筑的主体框架package.json:项目配置文件,记录所有依赖项
我建议新手先在src/components下创建HelloWorld.vue试试水,写个简单的:
<template> <div>{{ message }}</div> </template> <script> export default { data() { return { message: "我的第一个Vue组件!" } } } </script>3. 核心功能开发:从登录页面开始
3.1 安装UI组件库
后台系统离不开美观的界面,Element Plus是目前最流行的Vue3组件库。安装只需两步:
npm install element-plus然后在main.js中添加:
import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' createApp(App).use(ElementPlus).mount('#app')3.2 实现登录功能
一个标准的登录页面需要:
- 表单验证(防止用户乱输入)
- 接口请求(与后端通信)
- 路由跳转(登录成功后跳转)
这里给出最简实现:
<template> <el-form :model="form" :rules="rules" @submit.prevent="login"> <el-form-item prop="username"> <el-input v-model="form.username" placeholder="账号" /> </el-form-item> <el-form-item prop="password"> <el-input v-model="form.password" type="password" placeholder="密码" /> </el-form-item> <el-button type="primary" native-type="submit">登录</el-button> </el-form> </template> <script> export default { data() { return { form: { username: '', password: '' }, rules: { username: [{ required: true, message: '请输入账号' }], password: [{ required: true, message: '请输入密码' }] } } }, methods: { async login() { try { const res = await axios.post('/api/login', this.form) localStorage.setItem('token', res.data.token) this.$router.push('/dashboard') } catch (err) { this.$message.error(err.response.data.message) } } } } </script>4. 数据管理:Vuex与API封装
4.1 状态管理方案
当组件间需要共享数据时(比如用户信息),Vuex是官方推荐的状态管理工具。安装命令:
npm install vuex@next典型store结构如下:
// store/index.js import { createStore } from 'vuex' export default createStore({ state: { user: null, permissions: [] }, mutations: { SET_USER(state, user) { state.user = user } }, actions: { async fetchUser({ commit }) { const user = await axios.get('/api/user') commit('SET_USER', user.data) } } })4.2 接口请求优化
直接在每个组件里写axios请求会导致代码重复,我习惯在src/utils/request.js封装统一拦截器:
import axios from 'axios' const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 5000 }) // 请求拦截器 service.interceptors.request.use(config => { config.headers.Authorization = `Bearer ${localStorage.getItem('token')}` return config }) // 响应拦截器 service.interceptors.response.use( response => response.data, error => { if (error.response.status === 401) { router.push('/login') } return Promise.reject(error) } ) export default service5. 项目优化与部署
5.1 性能调优技巧
开发完成后,可以通过这些命令优化项目:
npm run build # 生成生产环境代码构建时建议配置vite的以下参数:
// vite.config.js export default defineConfig({ build: { chunkSizeWarningLimit: 1500, // 增大分块大小阈值 rollupOptions: { output: { manualChunks(id) { if (id.includes('node_modules')) { return 'vendor' } } } } } })5.2 常见问题排查
新手常遇到的几个问题:
- 端口冲突:修改vite配置中的
server.port - 跨域问题:配置代理服务器
- 页面空白:检查publicPath是否正确
代理配置示例:
// vite.config.js server: { proxy: { '/api': { target: 'http://your-backend.com', changeOrigin: true, rewrite: path => path.replace(/^\/api/, '') } } }6. 进阶路线建议
掌握基础开发后,可以逐步学习这些进阶内容:
- 权限控制:基于角色的访问控制(RBAC)实现
- 动态路由:根据用户权限生成侧边栏菜单
- 微前端:使用qiankun集成多个子系统
一个典型的权限控制流程:
- 后端返回用户权限列表
- 前端过滤路由配置
- 动态注册可用路由
// 过滤异步路由 function filterAsyncRoutes(routes, roles) { return routes.filter(route => { if (route.meta?.roles) { return roles.some(role => route.meta.roles.includes(role)) } return true }) }第一次部署项目到服务器时,我建议先用PM2来管理Node进程:
npm install pm2 -g pm2 start npm --name "my-admin" -- run start这样即使断开SSH连接,服务也不会停止。记得配置nginx反向代理,把80端口的请求转发到实际服务端口。