4.0 vue3简介
vue3优点
Composition API:这是Vue 3中最显著的变化之一。它提供了一种更灵活、更直观的方式来组织和重用逻辑代码。与Vue 2中的Options API相比,Composition API允许开发者根据功能来组织代码,而不是按照选项类型(如data、methods、computed等)。这使得代码更具可读性和可维护性,特别是对于大型项目。
性能优化:Vue 3在性能上有显著的提升。包括更快的虚拟DOM实现、更高效的组件初始化过程以及更小的打包体积。Vue 3的核心库大小比Vue 2要小得多,主要是因为采用了tree-shaking技术,只包含实际使用的代码。
更好的TypeScript支持:Vue 3是用TypeScript编写的,因此对TypeScript的支持更加原生和友好。相比于Vue 2,Vue 3提供了更完善的类型定义文件,让使用TypeScript开发Vue应用变得更加流畅。
Teleport(瞬移)特性:Vue 3引入了Teleport概念,允许组件的模板部分渲染到DOM中的任何位置,这对于模态框、提示框等需要脱离当前组件层次结构的应用场景非常有用。
Fragments(片段):在Vue 2中,每个组件必须有一个根元素。而在Vue 3中,组件可以有多个根节点,这为模板编写提供了更大的灵活性。
响应式系统的改进:Vue 3的响应式系统基于Proxy对象构建,相较于Vue 2使用的Object.defineProperty方法,提供了更好的性能,并且解决了之前的一些局限性,比如无法检测到对象属性的添加或删除。
代码初体验
create-vue
create-vue
是 Vue 官方推荐的、用于快速创建 Vue 3 项目的脚手工具。它是基于 Vite 构建的现代前端构建工具链的一部分,取代了旧版的 vue-cli
作为推荐的项目初始化方式
它不是像 vue-cli
那样的全局命令行工具,而是一个可执行的初始化脚本(npm init vue@latest 或者
npm create vue@latest),通过交互式提问来生成项目结构。
npm init vue@latest
和 npm create vue
实际上是完全等价的命令,它们的功能、行为和最终结果是一模一样的。
这两个命令都属于 npm 的 “执行包初始化脚本” 语法,是 npm 提供的便捷方式,用于运行那些用于创建项目的“脚手架”工具(如 create-vue
, create-react-app
等)。
1. npm init <package-name>
- 这是 npm 的语法糖,等价于
npm create <package-name>
- 它会安装并执行名为
create-<package-name>
的包。 - 例如:
npm init vue
→ 实际执行的是create-vue
这个包。
2 npm create <package-name>
- npm create: 这是 npm (Node Package Manager) 提供的一个便捷命令,等同于 npm init。它的作用是快速初始化或创建一个新项目,通常会调用一个特定的包(package)来生成项目结构。
- vue: 这里指定了要使用的包的名字。create-vue 是这个包的完整名称,但 npm create 允许你省略前面的 create- 前缀。
- @latest: 这个标签指定了要使用该包的最新版本。如果不指定,默认也是使用最新版。
所以,npm create vue@latest 的完整含义是:使用 npm 的 create 命令,调用 create-vue 包的最新版本来创建一个新的项目。
总结
问题 | 回答 |
---|---|
npm init vue@latest 和 npm create vue @latest 有区别吗? | ❌ 没有功能区别,完全等价 |
哪个更好? | ✅ 推荐 npm init vue@latest ,更明确 |
它们执行的是什么? | ✅ 都是执行 create-vue 这个包 |
为什么有两个写法? | ✅ npm 提供的两种语法糖,语义不同但功能一致 |
1. 初始化项目
npm init vue@latestnpm create vue@latest
运行后会进入交互式命令行界面,提示你选择功能:
✔ Project name: … my-vue-app
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit testing? … No / Yes
✔ Add Cypress for End-to-End testing? … No / Yes
✔ Add Playwright for End-to-End testing? … No / Yes
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes
✔ Add commitlint for git commit? … No / YesScaffolding project in ./my-vue-app...
Done. Now run:cd my-vue-appnpm installnpm run dev
2. 安装依赖并启动
cd my-vue-app
npm install
npm run dev
启动速度不到1s,即可在 http://localhost:5174
查看项目。比之前快了不止一点
项目结构示例
使用 create-vue
生成的典型项目结构如下:
my-vue-app/
├── src/
│ ├── assets/ # 静态资源
│ ├── components/ # 公共组件
│ ├── views/ # 页面视图(如果启用了 Vue Router)
│ ├── router/ # 路由配置
│ ├── stores/ # Pinia 状态管理
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
├── public/ # 静态公共资源
├── index.html # 入口 HTML
├── vite.config.ts # Vite 配置
├── tsconfig.json # TypeScript 配置
├── eslint.config.js # ESLint 配置(新版)
├── prettier.config.js # Prettier 配置
└── package.json
与 vue-cli
的对比
特性 | create-vue | vue-cli |
---|---|---|
构建工具 | Vite(快) | Webpack(较慢) |
启动速度 | 极快(毫秒级) | 较慢(依赖打包) |
默认 Vue 版本 | Vue 3 | 支持 Vue 2 / Vue 3 |
TypeScript 支持 | 原生良好 | 需配置 |
模板灵活性 | 交互式选择功能 | 固定模板或自定义 |
官方推荐 | ✅ 推荐 | ⚠️ 仍可用,但不主推 |
✅ 官方建议新项目使用
create-vue + Vite
,vue-cli
仍可用于维护旧项目
注意node版本
目前脚手架创建的项目,要求
Node.js 版本需要满足以下任一条件
^20.19.0
: 版本号大于等于20.19.0
且小于21.0.0
的 Node.js 20 版本。||
: 或者>=22.12.0
: 版本号大于等于22.12.0
的 Node.js 22 版本。
"engines": {"node": "^20.19.0 || >=22.12.0"
}
这不是创建 Vue 3 项目本身的通用要求,而是特定于当前这个项目的配置。
engines
字段的含义
engines
字段是package.json
中的一个可选字段,用于声明项目建议或要求的 Node.js 和 npm 版本。- 它本身不会强制阻止你在不兼容的 Node 版本上运行
npm install
或npm run serve
。但是,一些工具(如npm
配合engine-strict
标志,或yarn
,pnpm
)会检查这个字段并在版本不匹配时发出警告或报错。 - 它的主要作用是告知开发者这个项目预期在什么环境下运行。