Vue 基础配置新手总结

Vue 基础配置新手总结

Vue 是一套用于构建用户界面的渐进式框架,核心特点是 "组件化" 和 "响应式",新手入门需掌握 "环境搭建→项目创建→核心配置→基础功能" 的完整流程,以下是分步梳理的实用指南:

一、环境准备(前提条件)

Vue 项目依赖 Node.js 环境(用于运行 npm 命令),需先完成基础工具安装:

1. 安装 Node.js(含 npm)

  • 下载地址Node.js 官网(推荐 LTS 长期支持版,如 v20.x)

  • 验证安装:安装后打开终端,输入以下命令,显示版本号即成功:

    node -v # 查看 Node 版本(需 ≥14.18,Vue CLI 4+ 要求)

    npm -v # 查看 npm 版本(随 Node 自动安装)

  • 可选优化:npm 镜像加速(国内用户避免下载缓慢),设置淘宝镜像:

    npm config set registry https://registry.npm.taobao.org

2. 安装 Vue 脚手架(Vue CLI)

Vue CLI 是官方工具,用于快速创建和管理 Vue 项目,终端执行安装命令:

复制代码
\# 全局安装 Vue CLI(仅需安装一次)

npm install -g @vue/cli

\# 验证安装:显示版本号即成功(需 ≥4.x)

vue --version

二、创建 Vue 项目(从 0 到 1)

1. 初始化项目

终端进入目标文件夹,执行创建命令,按提示完成配置:

复制代码
\# 创建项目(project-name 替换为你的项目名,如 vue-demo)

vue create project-name
关键配置选择(新手推荐选项):
  1. 预设选择 :选 Manually select features(手动选择功能)

  2. 功能勾选:按空格勾选以下基础功能(新手必备):

  • Babel(转译 ES6+ 语法,兼容旧浏览器)

  • Vue Router(路由管理,实现单页应用跳转)

  • Vuex/Pinia(状态管理,存储全局数据,新手可选 Pinia 更简单)

  • CSS Pre-processors(CSS 预处理器,推荐选 SCSS/SASS)

  • ESLint(代码规范检查,推荐选 ESLint + Standard config

  1. 其他配置
  • Vue 版本:选 3.x(Vue 3 是当前主流,支持 Composition API)

  • CSS 预处理器:选 Sass/SCSS (with dart-sass)

  • ESLint 校验时机:选 Lint on save(保存时自动校验)

  • 配置文件存放:选 In dedicated config files(单独文件存放配置,更清晰)

  • 是否保存预设:选 N(新手无需保存,后续可自定义)

2. 启动项目

配置完成后,终端进入项目目录,执行启动命令:

复制代码
\# 进入项目目录

cd project-name

\# 启动开发服务器(默认端口 8080)

npm run serve
  • 启动成功后,终端会显示访问地址(如 http://localhost:8080),打开浏览器即可看到 Vue 初始页面。

3. 项目目录结构(核心文件说明)

新手需重点关注以下关键文件 / 文件夹,理解其作用:

复制代码
project-name/

├─ node\_modules/   # 项目依赖(npm install 自动生成,无需手动修改)

├─ public/         # 静态资源目录(不会被 Webpack 处理)

│  ├─ index.html   # 项目入口 HTML(Vue 会挂载到这个文件的 #app 节点)

│  └─ favicon.ico  # 浏览器标签图标

├─ src/            # 源码目录(核心开发区域)

│  ├─ assets/      # 静态资源(会被 Webpack 处理,如图片、全局 CSS)

│  ├─ components/  # 公共组件(可复用的 UI 组件,如 Button、Card)

│  ├─ router/      # 路由配置(定义页面跳转规则,index.js 是核心)

│  ├─ store/       # 状态管理(Pinia/Vuex 配置,存储全局数据)

│  ├─ views/       # 页面组件(对应路由的页面,如 Home、About)

│  ├─ App.vue      # 根组件(所有页面的父组件,包含 router-view)

│  └─ main.js      # 入口 JS(初始化 Vue 实例,挂载根组件、路由、状态)

├─ .eslintrc.js    # ESLint 配置(代码规范规则)

├─ babel.config.js # Babel 配置(ES6+ 转译规则)

├─ package.json    # 项目配置(依赖列表、脚本命令)

└─ vue.config.js   # Vue 项目核心配置(端口、代理、打包等,需手动创建)

三、核心配置文件(新手必改)

1. vue.config.js(项目全局配置)

Vue CLI 项目默认没有 vue.config.js,需在项目根目录手动创建,以下是新手常用配置(注释详解):

复制代码
module.exports = {

  // 1. 开发服务器配置(解决跨域、修改端口)

  devServer: {

    port: 8081, // 自定义开发端口(默认 8080,避免端口冲突)

    open: true, // 启动项目后自动打开浏览器

    proxy: { // 配置代理,解决前端跨域请求后端接口问题

      '/api': { // 匹配以 /api 开头的请求

        target: 'http://localhost:3000', // 后端接口地址(替换为你的后端地址)

        changeOrigin: true, // 开启跨域(关键)

        pathRewrite: { // 重写路径(可选,如后端无 /api 前缀则去掉)

          '^/api': '' // 把请求中的 /api 替换为空

        }

      }

    }

  },

  // 2. 打包配置(生产环境)

  outputDir: 'dist', // 打包输出目录(默认 dist,可自定义)

  assetsDir: 'static', // 静态资源(图片、CSS、JS)输出目录(默认空,打包到 dist 根目录)

  publicPath: './', // 打包后 HTML 中静态资源的路径(本地打开打包后的 HTML 需设为 ./,部署到服务器可设为 /)

  // 3. 其他常用配置

  lintOnSave: false, // 关闭 ESLint 校验(新手若频繁报错可临时关闭,建议后期开启)

  productionSourceMap: false // 关闭生产环境源码映射(减少打包体积,加速加载)

}

2. 路由配置(router/index.js)

Vue Router 是实现单页应用跳转的核心,以下是基础路由配置示例:

复制代码
// 1. 引入依赖

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

// 2. 引入页面组件

import Home from '../views/Home.vue'

import About from '../views/About.vue'

// 3. 定义路由规则(path: 路径,name: 路由名,component: 对应组件)

const routes = \[

  {

    path: '/',

    name: 'Home',

    component: Home // 首页组件

  },

  {

    path: '/about',

    name: 'About',

    component: About // 关于页组件

    // 可选:路由懒加载(优化首屏加载速度,推荐使用)

    // component: () => import('../views/About.vue')

  }

]

// 4. 创建路由实例

const router = createRouter({

  history: createWebHistory(process.env.BASE\_URL), // 路由模式(HTML5 历史模式,无 # 号)

  routes // 传入路由规则

})

// 5. 导出路由,在 main.js 中使用

export default router

3. Pinia 状态管理配置(新手友好版)

Pinia 是 Vue 3 推荐的状态管理工具,比 Vuex 更简单,步骤如下:

(1)创建 Pinia 实例(store/index.js)
复制代码
// 1. 引入 Pinia

import { createPinia } from 'pinia'

// 2. 创建 Pinia 实例

const pinia = createPinia()

// 3. 导出实例,在 main.js 中挂载

export default pinia
(2)定义状态模块(store/modules/userStore.js)
复制代码
// 1. 引入 defineStore(定义状态模块)

import { defineStore } from 'pinia'

// 2. 定义并导出状态模块(第一个参数是模块名,唯一;第二个参数是配置)

export const useUserStore = defineStore('user', {

  // 状态(类似组件的 data)

  state: () => ({

    username: 'Vue 新手', // 初始值

    isLogin: false

  }),

  // 计算属性(类似组件的 computed,缓存结果)

  getters: {

    // 获取用户名的大写形式

    upperUsername: (state) => state.username.toUpperCase()

  },

  // 方法(修改状态,类似组件的 methods,支持异步)

  actions: {

    // 登录方法(修改状态)

    login(name) {

      this.username = name

      this.isLogin = true

    },

    // 退出方法

    logout() {

      this.username = ''

      this.isLogin = false

    }

  }

})
(3)在组件中使用 Pinia
复制代码
\<template>

&#x20; \<div>

&#x20;   \<p>用户名:{{ userStore.username }}\</p>

&#x20;   \<p>大写用户名:{{ userStore.upperUsername }}\</p>

&#x20;   \<button @click="userStore.login('张三')" v-if="!userStore.isLogin">登录\</button>

&#x20;   \<button @click="userStore.logout" v-else>退出\</button>

&#x20; \</div>

\</template>

\<script setup>

// 1. 引入状态模块

import { useUserStore } from '@/store/modules/userStore'

// 2. 创建状态实例

const userStore = useUserStore()

\</script>

四、Vue 基础语法与组件配置

1. 单文件组件(SFC:.vue 文件)结构

Vue 组件的核心是 .vue 文件,包含 3 个核心部分:template(模板)、script(逻辑)、style(样式),示例如下:

复制代码
\<template>

&#x20; \<!-- 模板:HTML 结构,支持 Vue 指令(v-if、v-for 等) -->

&#x20; \<div class="hello">

&#x20;   \<h1>{{ msg }}\</h1> \<!-- 插值表达式:显示数据 -->

&#x20;   \<button @click="changeMsg">修改消息\</button> \<!-- 事件绑定:@click 是 v-on:click 的简写 -->

&#x20;   \<input v-model="msg" placeholder="输入消息"> \<!-- 双向绑定:输入框值同步到 msg -->

&#x20; \</div>

\</template>

\<script setup>

// 逻辑:组件的 JS 代码(Vue 3 推荐 setup 语法,更简洁)

// 1. 引入依赖(如组件、工具)

import { ref } from 'vue' // ref 用于创建响应式数据(基础类型:字符串、数字等)

// 2. 定义响应式数据(修改后页面自动更新)

const msg = ref('Hello Vue!')

// 3. 定义方法

const changeMsg = () => {

&#x20; msg.value = 'Vue 基础配置真简单!' // 用 ref 创建的数据,需通过 .value 修改

}

\</script>

\<style scoped>

/\* 样式:组件的 CSS,scoped 表示样式仅作用于当前组件(避免污染) \*/

.hello {

&#x20; text-align: center;

&#x20; padding: 20px;

}

button {

&#x20; margin-left: 10px;

&#x20; padding: 5px 10px;

}

\</style>

2. 组件通信(新手常用 3 种方式)

(1)父组件 → 子组件(props 传值)
  • 子组件(Child.vue) :通过 defineProps 接收父组件数据

    <template>

    <p>父组件传的名字:{{ name }}</p>

    <p>父组件传的年龄:{{ age }}</p>

    </template>

    <script setup>

    // 定义接收的 props(指定类型和默认值)

    const props = defineProps({

    name: {

    type: String,

    required: true // 必传

    },

    age: {

    type: Number,

    default: 18 // 默认值

    }

    })

    </script>

  • 父组件(Parent.vue):通过属性传递数据给子组件

    <template>

    <Child name="张三" :age="20" /> <!-- :age 是 v-bind:age 的简写,传递数字需加 : -->

    </template>

    <script setup>

    import Child from './Child.vue' // 引入子组件

    </script>

(2)子组件 → 父组件(emit 触发事件)
  • 子组件(Child.vue) :通过 defineEmits 触发父组件事件

    <template>

    <button @click="sendMsgToParent">向父组件传值</button>

    </template>

    <script setup>

    // 定义可触发的事件

    const emit = defineEmits(['sendMsg'])

    const sendMsgToParent = () => {

    // 触发事件并传值(第一个参数是事件名,后续是传递的数据)

    emit('sendMsg', '我是子组件的消息!')

    }

    </script>

  • 父组件(Parent.vue):监听子组件事件并接收数据

    <template>

    <Child @sendMsg="getMsgFromChild" />

    <p>子组件传的消息:{{ childMsg }}</p>

    </template>

    <script setup>

    import Child from './Child.vue'

    import { ref } from 'vue'

    const childMsg = ref('')

    // 接收子组件数据的方法

    const getMsgFromChild = (msg) => {

    childMsg.value = msg

    }

    </script>

(3)全局数据共享(Pinia)

如前文 "Pinia 状态管理配置" 所示,通过全局 store 实现任意组件间的数据共享,无需逐层传递。

五、新手常见问题与避坑

  1. "端口被占用" 错误

    启动项目时提示 Port 8080 is already in use,解决方案:在 vue.config.js 中修改 devServer.port 为其他端口(如 8081、8082)。

  2. 跨域请求失败

    前端请求后端接口时提示 Access to XMLHttpRequest at ... has been blocked by CORS policy,解决方案:在 vue.config.js 中配置 devServer.proxy(见前文配置示例),确保 changeOrigin: true

  3. 响应式数据修改后页面不更新

  • ref 创建的基础类型数据(字符串、数字),修改时需加 .value(如 msg.value = '新值');

  • reactive 创建的对象 / 数组,直接修改属性即可(如 user.name = '新名字'),但新增属性需用 Vue.set 或解构赋值。

  1. 组件引入后报错 "Unknown custom element"

    原因:组件未正确引入或注册,解决方案:

  • 确保 import 路径正确(相对路径需加 ./,如 import Child from './Child.vue');

  • Vue 3 setup 语法中,引入的组件无需手动注册,直接使用即可(旧版 Options API 需在 components 中注册)。

  1. ESLint 报错 "Expected indentation of 2 spaces but found 4"

    原因:代码缩进不符合规范(ESLint 要求 2 个空格,而你用了 4 个),解决方案:

  • 手动调整缩进为 2 个空格;

  • 临时关闭 ESLint(在 vue.config.js 中设 lintOnSave: false),后期建议学习规范并开启。

六、打包与部署(新手入门版)

1. 打包项目

开发完成后,执行打包命令生成生产环境文件:

复制代码
npm run build
  • 打包成功后,项目根目录会生成 dist 文件夹(或你在 vue.config.js 中配置的 outputDir),包含 HTML、CSS、JS 等静态文件。

2. 本地预览打包结果

打包后的文件需通过服务器打开(直接双击 HTML 会有路径问题),推荐用 serve 工具预览:

复制代码
\# 全局安装 serve(仅需一次)

npm install -g serve

\# 进入 dist 目录并启动服务器

cd dist

serve
  • 启动后按提示访问地址(如 http://localhost:3000),即可预览生产环境效果。

3. 简单部署(本地服务器)

dist 文件夹中的所有文件复制到本地服务器(如 XAMPP、WAMP 的 htdocs 目录),然后通过服务器地址(如 http://localhost/dist)访问即可。

总结

Vue 基础配置的核心逻辑是:环境搭建(Node.js + Vue CLI)→ 项目创建(选基础功能)→ 核心配置(路由、状态、跨域)→ 组件开发(语法 + 通信)→ 打包部署。新手无需一开始掌握所有高级功能(如自定义指令、混入、性能优化),先吃透 "响应式数据、组件通信、路由跳转、状态管理" 这 4 个核心点,再逐步学习 Vue 3 的 Composition API、自定义 Hooks 等进阶内容。

相关推荐
哆啦A梦15882 小时前
40 token
前端·vue.js·node.js
炫饭第一名2 小时前
Cursor 一年深度开发实践:前端开发的效率革命🚀
前端·程序员·ai编程
摇滚侠2 小时前
Vue 项目实战《尚医通》,获取挂号医生的信息展示,笔记43
前端·javascript·vue.js·笔记·html5
晴殇i2 小时前
关于前端基础快速跨入鸿蒙HarmonyOS开发
前端·harmonyos
k09333 小时前
vue3中基于AntDesign的Form嵌套表单的校验
前端·javascript·vue.js
茶憶3 小时前
UniApp RenderJS中集成 Leaflet地图,突破APP跨端开发限制
javascript·vue.js·uni-app
没头脑和不高兴y3 小时前
Element-Plus-X:基于Vue 3的AI交互组件库
前端·javascript
ErMao3 小时前
Proxy 与 Reflect:最硬核、最实用的解释
前端·javascript
N***73853 小时前
前端路由权限动态更新,Vue与React实现
前端·vue.js·react.js