创建Vue项目的3种方式

7,059 阅读7分钟
项目 \ 方式create-vue@vue/clivue-cli
介绍Vue 官方的项目脚手架工具(基于Vite)第二代官方项目脚手架 cli版本 >= 3(基于Webpack)第一代官方项目脚手架 cli版本 < 3(基于Webpack)
与Vue版本的关系Vue3、Vue2都可以创建@vue/cli@3 ~ 4.5,只能创建vue2项目 @vue/cli@4.5以上,可以创建vue2和3的项目只能创建vue2的项目
最新版本v3.7.0@vue/cli@5.0.8vue-cli@2.9.6
npm依赖项目创建后手动安装项目创建过程自动安装
文档链接快速上手 Vue.js (vuejs.org)创建一个项目 Vue CLI (vuejs.org)Introduction · GitBook (vuejs-templates.github.io)

注:@vue/cli 与 vue-cli 之间是冲突的,二者只能同时存在一个。

Vue CLI 现已处于维护模式!现在官方推荐使用 create-vue 来创建基于 Vite 的新项目

一、命令

1. 安装

  • create-vue

    npm init vue@latest     # 这一指令将会安装并执行 create-vue
    
    # 等价于
    npx create-vue@latest
    
    # 等价于
    npm install create-vue@latest -g
    create-vue		# 这个过程中,执行create-vue模块的bin,执行它的创建逻辑,如果对过程细节感兴趣,可以查看create-vue源码
    npm uninstall create-vue -g
    
  • @vue/cli

    npm install -g @vue/cli
    
  • vue-cli

    npm install vue-cli -g
    

注意:@vue/cli 和 vue-cli 是互斥的,两者只能安装其中一个。


2. 新建项目

  • create-vue

    npm init vue@latest     # 安装和新建项目,共用一条命令
    npm init vue@2	    # 创建Vue2项目
    
  • @vue/cli

    vue create project-name     # 方式一:使用命令行进行项目配置
    vue ui                     # 方式二:使用ui界面进行项目配置
    
  • vue-cli

    vue init webpack project-name
    

3. 启动项目

  • create-vue

    npm run dev
    
  • @vue/cli

    npm run serve
    
  • vue-cli

    npm run dev
    

注意:以上只是初始的默认命令,这个命令是可以修改的



二、项目配置

1. create-vue

输入npm init vue@latest之后,会出现如下命令行界面,用于配置项目

image-20230615163028254

你将会看到一些诸如 TypeScript 和测试支持之类的可选功能提示。如果不确定是否要开启某个功能,你可以直接按下回车键选择 No


2. @vue/cli

输入vue create project-name命令之后,会出现:

image-20230615232651066

@vue/cli自带一些默认的 preset,如果想自定义,选择第三项

image-20230615164240814

配置项包括如下 6 项,最后一项提示是否将该设置保存为 自定义的preset

image-20230615164956931

创建过程中,自动安装了npm依赖项(需要等待一段时间)

image-20230615164521497


3. vue-cli

目前使用 vue-cli 似乎已经无法创建项目

image-20230615233925495



三、项目结构

1. create-vue

├── index.html
├── package.json        // 项目基本信息,包依赖信息等
├── public
|  └── favicon.ico
├── README.md
├── src
|  ├── App.vue          // 页面入口文件
|  ├── assets           // 静态文件目录
|  ├── components
|  └── main.js          // 程序入口文件,加载各种公共组件
├── vite.config.js      // Vite配置文件
└── .vscode
    └── extensions.json // vscode的团队共享配置

补充:

关于.vscode/extensions.json文件更多的细节,请查看: 团队一键安装项目推荐的vscode插件(使用extensions.json)


2. @vue/cli

├── babel.config.js     // babel的控制文件,用于babel进行转化语法,一般不需要我们写内容
├── jsconfig.json       // 指定了根文件以及 JavaScript 语言服务 提供的功能选项
├── node_modules
├── package-lock.json
├── package.json        
├── public
|  ├── index.html       // 入口页面
|  └── favicon.ico      // 标签页图标
├── README.md
├── src // 源码目录 
|  ├── App.vue          // 页面入口文件
|  ├── assets
|  ├── components
|  └── main.js          // 程序入口文件,加载各种公共组件
├── vue.config.js       // 是一个可选的配置文件,包含了大部分的vue项目配置
└── .eslintrc.js        // ESLint配置文件

补充:


3. vue-cli

我自己没有成功使用 vue-cli 创建到项目,以下内容是引用自:彻底搞懂vue-cli各版本和vue2和vue3之间的关系! - 掘金 (juejin.cn)

|-- build   // 项目构建(webpack)相关代码
|   |-- build.js                     // 生产环境构建代码
|   |-- check-version.js             // 检查node、npm等版本
|   |-- utils.js                     // 构建工具相关
|   |-- vue-loader.conf.js           // webpack loader配置
|   |-- webpack.base.conf.js         // webpack基础配置
|   |-- webpack.dev.conf.js          // webpack开发环境配置,构建开发本地服务器
|   |-- webpack.prod.conf.js         // webpack生产环境配置
|-- config  // 项目开发环境配置
|   |-- dev.env.js                   // 开发环境变量
|   |-- index.js                     // 项目配置文件,build目录下有不少文件引用了它
|   |-- prod.env.js                  // 生产环境变量
|-- src     // 源码目录
|   |-- components                   
|   |-- router                       
|   |-- App.vue                      // 页面入口文件
|   |-- main.js                      // 程序入口文件,加载各种公共组件
|-- static                           // 静态文件,比如一些图片,json数据等
|-- .babelrc                         // babel编译参数,ES6语法编译配置
|-- .editorconfig                    // 定义代码格式
|-- .gitignore                      
|-- .postcsssrc                      // postcss配置文件
|-- README.md                       
|-- index.html                       // 入口页面
|-- package.json                     // 项目基本信息,包依赖信息等

针对build目录下几个文件再具体解读,参考文章:vue-cli基本使用(详细代码)

文件作用
webpack.base.conf.js1 配置webpack编译入口 2 配置webpack输出路径和命名规则 3 配置模块resolve规则 4 配置不同类型模块的处理规则
webpack.dev.conf.js1 将hot-reload相关的代码添加到entry chunks 2 合并基础的webpack配置 3 使用styleLoaders 4 配置Source Maps 5 配置webpack插件
utils.js1 配置静态资源路径 2 生成cssLoaders用于加载.vue文件中的样式 3 生成styleLoaders用于加载不在.vue文件中的单独存在的样式文件
vue-loader.conf.js配置了css加载器以及编译css之后自动添加前缀
build.js1 loading动画 2 删除创建目标文件夹 3 webpack编译 4 输出信息
webpack.prod.conf.js合并基础的webpack配置 2 使用styleLoaders 3 配置webpack的输出 4 配置webpack插件 5 gzip模式下的webpack插件配置 6 webpack-bundle分析
check-versions.js检查npm,node.js版本



四、模式 & 环境变量

1. create-vue

Vite 构建的项目默认只有developmentproduction两种模式。可以自定义更多模式。

内置的环境变量

  • import.meta.env.MODE(String,当前所处的模式)
  • import.meta.env.BASE_URL(String,部署应用时的基本 URL。他由base 配置项决定)
  • import.meta.env.PROD/DEV/SSR(Boolean,当前是否运行在生产环境 / 开发环境 / server)

配置文件.env.development.env.production(放在项目根目录下)

.env                # 所有情况下都会加载
.env.local          # 所有情况下都会加载,但会被 git 忽略
.env.[mode]         # 只在指定模式下加载
.env.[mode].local   # 只在指定模式下加载,但会被 git 忽略

如何引用环境变量

  • 请注意:在配置文件中,只有以VITE_前缀开头的环境变量才能在代码中使用!
  • 在项目JS代码中,通过import.meta.env.xxx使用当前模式下的环境变量
  • 在HTML模板中,可以通过%xxx%来使用环境变量。示例如下:
# .env.development
VITE_APP_TITLE=presentation-demo
// JS代码中
console.log(import.meta.env.VITE_APP_TITLE)
<!-- html模板中 -->
<h1>
    Welcome to %VITE__APP_TITLE%
</h1>

更多信息环境变量和模式 | Vite 官方中文文档 (vitejs.dev)


2. @vue/cli

Vue CLI 创建的项目默认有三种NODE_ENV(模式):developmenttestproduction

配置文件:放在项目根目录下,用来指定环境变量

.env                # 在所有的环境中被载入
.env.local          # 在所有的环境中被载入,但会被 git 忽略,保存一些不能公开的环境变量,例如密钥等
.env.[mode]         # 只在指定的模式中被载入
.env.[mode].local   # 只在指定的模式中被载入,但会被 git 忽略

注意:只有 NODE_ENVBASE_URL 和以 VUE_APP_ 开头的变量将通过 webpack.DefinePlugin 静态地嵌入到客户端侧的代码中,这是为了防止意外泄露隐私信息!

.env 环境文件是通过运行 vue-cli-service 命令载入的,因此环境文件发生变化,你需要重启服务!

如何使用环境变量

# .env.production
VUE_APP_TITLE=Vue CLI demo
// 项目JS代码中
console.log(process.env.VUE_APP_TITLE)

内置的环境变量:(不必自定义,始终可以使用)

  • NODE_ENV:String类型,会是 "development""production""test" 中的一个
  • BASE_URL - 会和 vue.config.js 中的 publicPath 选项相符,即你的应用会部署到的基础路径

更多信息模式和环境变量 | Vue CLI (vuejs.org)


3. vue-cli

配置文件/config/dev.env.js/config/prod.env.js

如何使用环境变量

// config/prod.env.js
module.exports = {
  NODE_ENV: '"production"',
  DEBUG_MODE: false,
  API_TITLE: '"Vue CLI demo"' // 注意:如果值是String类型,需要用'""'双重引号包裹
}
// 项目JS代码中
console.log(process.env.API_TITLE)

更多信息:Environment Variables · GitBook (vuejs-templates.github.io)

vue-cli的环境变量配置感觉倾向于原始的webpack配置,这里采用key:value键值对的方式定义环境变量与前两者不同!


参考链接

快速上手 | Vue.js (vuejs.org)

创建一个项目 | Vue CLI (vuejs.org)

彻底搞懂vue-cli各版本和vue2和vue3之间的关系! - 掘金 (juejin.cn)

jsconfig.json 中文文档 - 掘金 (juejin.cn)

团队一键安装项目推荐的vscode插件(使用extensions.json)

环境变量和模式 | Vite 官方中文文档 (vitejs.dev)

Introduction · GitBook (vuejs-templates.github.io)