Vue-Cli

Vue-Cli 脚手架相关

一、创建vue项目

基于 交互式命令行 的方式,创建新版vue项目

创建vue-cli2的项目时,使用的命令行是:

vue init webpack project-name

而创建vue-cli3的项目时,使用的命令行是:

vue create my-project

基于 图形化界面 的方式,创建新版vue项目

vue ui

使用vue-ui视图工具创建Vue项目,需要安装最新的Vue-cli脚手架。

Untitled

基于 2.x的旧模板 的方式,创建旧版vue项目

npm install @vue/cli-init -g
vue init webpack my-project

//安装依赖库和命令行工具
npm install vue@2.1.6 element-ui@1.4.6 vuex axios    //回车---安装依赖库,建议指定 vue 和 element 版本,避免版本升级带来意料之外的 bug
npm install -g vue-cli                               //回车---全局安装 vue 命令行工具

//选择项目的安装路径,若省略此操作则默认安装到 C 盘, cd.. 表示返回上级
d:                                                   //回车---选择D盘
cd test                                              //回车---选择D盘的test文件夹

//创建vue项目 (后续创建vue项目只需操作以下步骤)
vue init webpack myProject                           //回车---创建一个基于 webpack 模板的新项目myProject

//等待下载完成后,配置项目基础项
Project name (myTest)                                //项目名称,可不用书写直接回车
Project description (A Vue.js project)               //项目描述,可不用书写直接回车
Author (iwen )                       //项目作者,可不用书写直接回车
Vue bulid(Use....)                                   //回车
Install vue-router?(Y/n)                             //是否安装路由,     输入 Y 回车
Use ESLint to lint your code?(Y/n)                   //是否安装代码检查, 输入 n 回车(需要时选择 Y )
Set up unit tests (Y/n)                              //是否安装单元测试, 输入 n 回车(需要时选择 Y )
Setup e2e tests with Nightwatch?(Y/n)                //是否安装e2e测试,  输入 n 回车(需要时选择 Y )
/*
    这几个配置选择yes 或者 no 对于我们项目最大的影响就是,如果选择了yes 则生成的项目会自动有相关的配置,有一些loader就会配套下载。
    所以如果我们确定不用的话最好不要yes,不然下一步要下很多没有用的loader
*/

cd myProject                                         //回车---进入项目目录
npm install                                          //回车---安装依赖
npm run dev                                          //回车---运行项目

//然后提示: (打开页面网址即 http://localhost:8080)

项目结构

初始项目结构如下:
┌── build                           // webpack相关配置文件
│   ├── build.js                    // webpack打包配置文件
│   ├── check-versions.js           // 检查npm,nodejs版本
│   ├── dev-client.js               // 设置环境
│   ├── dev-server.js               // 创建express服务器,配置中间件,启动可热重载的服务器,用于开发项目
│   ├── utils.js                    // 配置资源路径,配置css加载器
│   ├── vue-loader.conf.js          // 配置css加载器等
│   ├── webpack.base.conf.js        // webpack基本配置
│   ├── webpack.dev.conf.js         // 用于开发的webpack设置
│   └── webpack.prod.conf.js        // 用于打包的webpack设置
│
├── config                          // 项目基本设置文件夹,主要是指定开发和打包中的静态资源路径、要压缩的文件类型、开发使用的端口号、开发使用虚拟服务器跨域请求 api 等。
│   ├── dev.env.js                  // 开发配置文件,
│   ├── index.js                    // 配置主文件
│   └── prod.env.js                 // 编译配置文件
│
├── node_modules                    // 项目依赖包文件夹
├── src                             // 我们的项目的源码编写文件(里面的文件可根据喜好,随意更改)
│   ├── assets                      // 初始项目资源目录
│   │     └── logo.png
│   ├── components                  // 组件目录
│   │     └── Hello.vue             // 测试组件,回头删除
│   ├── router                      // 路由配置文件夹
│   │     └── index.js              // 路由配置文件
│   ├── App.vue                     // 入口组件,pages 里的组件会被插入此组件中,此组件再插入 index.html 文件里,形成单页面应用;
│   └── main.js                     // 入口 js 文件,影响全局,作用是引入全局使用的库、公共的样式和方法、设置路由等。
│
├── static                          // 资源放置目录,静态资源文件夹,放置不会变动的资源,直接被复制到最终的打包目录(默认是dist/static)下
├── .babelrc:                       // 使用 babel 的配置文件,用来设置转码规则和插件;
├── .editorconfig:                  // 编辑器配置(代码的规范文件,规定使用空格或 tab 缩进,缩进的长度是两位还是四位之类的代码风格,使用的话需要在编辑器里下载对应的插件);
├── .eslintignore:                  // 指定 eslint 忽略的文件;
├── .eslintrc:                      // 配置 eslint 的检测规则,强制按照规则书写代码
├── .gitignore:                     // 指定 git 忽略的文件,所有 git 操作均不会对其生效;
├── .postcssrc:                     // 指定使用的 css 预编译器,里面默认配置了 autoprefixer ,自动补全浏览器前缀;
├── index.html:                     // 首页文件,项目运行的时候,会自动将我们在 src 文件夹里生成的组件插入这个文件里;
├── package-lock.json               // npm5 新增文件,优化性能
├── package.json                    // 项目依赖包配置文件(node配置文件)
└── README.md                       // 项目说明文档

二、运行项目

开发阶段

// Vue2 项目打包
npm run dev

// Vue3 项目打包
npm run serve

上线阶段

npm run build

单文件组件

vue serve demo.vue

三、脚手架的自定义配置

项目根目录新建vue.config.js

module.export = {
    devServer: {
        // 自动打开浏览器
        open: true,
        // 配置端口
        port: 8888
    }
}

四、vue-cli2和vue-cli3的区别

创建项目

创建vue-cli2的项目时,使用的命令行是:

vue init webpack project-name

而创建vue-cli3的项目时,使用的命令行是:

vue create my-project

运行项目命令

vue-cli2项目使用的运行命令行是:

npm run dev

vue-cli3项目使用的运行命令行是:

npm run serve

跨域

Vue-cli2使用proxyTable

vue的转发机制(proxyTable),proxyTable代理功能可以实现转发机制(通过修改config里面修改index.js文件)。

// 配置好后一定要关闭原来的server,重新npm run dev启动项目。不然无效。
proxyTable: {
  // 用‘/api’开头,代理所有请求到目标服务器
  '/api': {
    target: 'http:xxx.com', // 目标接口域名
    changeOrigin: true, // 是否启用跨域
    pathRewrite: { //
      '^/api': ''
  }
}

Vue-cli3使用proxy

注意:配置proxy之后, axios 的 baseURL 也要做相应的修改。

module.exports = {
  devServer:{
    host: 'localhost',//target host
    port: 8080,
    //proxy:{'/api':{}},代理器中设置/api,项目中请求路径为/api的替换为target
    proxy:{
      '/api':{
        target: 'http://192.168.1.30:8085',//代理地址也就是服务器地址,这里设置的地址会代替axios中设置的baseURL
        changeOrigin: true,// 如果接口跨域,需要进行这个参数配置
        secure:false, // 使用的是http协议则设置为false,https协议则设置为true
        //ws: true, // proxy websockets
        //pathRewrite方法重写url
        pathRewrite: {
          '^/api': '/'
          //pathRewrite: {'^/api': '/'} 重写之后url为 http://192.168.1.30:8085/xxxx
          //pathRewrite: {'^/api': '/api'} 重写之后url为 http://192.168.1.30:8085/api/xxxx
          // 设置之后虽然浏览器看到的请求还是 localhost/xxxx,但是实际上已经转到http://192.168.1.30:8085/xxxx上了
          // 如果只是修改域名,则不需要写pathRewrite
        }
      }
    }
  },
}

统一代理,赋值为字符串(/api),与proxy里配置的要对应。

axios.defaults.baseURL = '/api'

五、Vue项目的性能优化

编码阶段

  • 尽量减少data中的数据,data中的数据都会增加getter和setter,会收集对应的watcher
  • v-if和v-for不能连用
  • key保证唯一
  • 使用路由懒加载、异步组件
  • 防抖、节流
  • 第三方模块按需导入
  • 图片懒加载
  • 长列表滚动到可视区域动态加载

SEO优化

  • 预渲染
  • 服务端渲染SSR

打包优化

  • 压缩代码
  • Tree Shaking/Scope Hoisting
  • 使用cdn加载第三方模块
  • 多线程打包happypack
  • splitChunks抽离公共文件
  • sourceMap优化

用户体验

  • 骨架屏
  • PWA
  • 还可以使用缓存(客户端缓存、服务端缓存)优化、服务端开启gzip压缩等。