Vue通过vue-cli3.0图形化Vue-ui创建项目到优化部署项目

简介

vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目。工具就是为了让开发者能够开箱即用快速地进行应用开发而开发的,可以通过vue create命令行的方式创建vue项目,也可以使用vue ui图形化的方式创建vue项目。本篇文章主要讲解使用vue ui图形化方式来创建vue项目。

优点

  • 不需要使用繁琐的命令行来操作;
  • 直观高效的安装插件和依赖;
  • 对打包后的项目直观查看资源文件和分析项目。

案例地址:https://github.com/pengjunshan/WebPJS

其它Web文章
CSS浮动的使用和解决浮动的五种方法
CSS定位relative、absolute、fixed使用总结
原生开发WebApi知识点总结
开发中常用jQuery知识点总结
C3动画+H5知识点使用总结
Flex布局知识点总结
ES6常用知识总结
Vue学习知识总结
开发环境到生产环境配置webpack
待续......

前提

Node.js版本

Node.js版本必须是8.9 或更高版本,通过node -v命令行查看本地node的版本,如版本小于8.9只需更新node版本即可。

vue-cli版本

vue-cli版本必须是3.0或更高版本,通过vue -V命令行查看本地vue-cli的版本,如果版本小于3.0需要先通过 npm uninstall vue-cli -g 或 yarn global remove vue-cli 卸载它,然后在通过npm install -g @vue/cli 或 yarn global add @vue/cli再安装它。

创建项目

1.使用vue ui命令行启动可视化程序
2.打开可视化界面

复制生成的http://localhost:8000地址到浏览器中打开,如果不是第一次使用,会默认上一次使用的项目。

3.创建新项目

首先点击左上角项目倒三角,弹窗底部有个Vue项目管理器,点击它进入创建项目页面。

4.选择创建项目目录

首先点击创建按钮,然后选择创建项目的地址,点击下方在此创建新项目。

5.创建项目名称

填写项目文件夹,包管理器一般默认就行。

6.选择预设

建议选择手动

7.选择安装的插件

Babel是默认必选的,跳转肯定需要Router,所以Router也选上,ESLint用来规范代码的,选中“使用配置文件”可以将插件的配置保存在各自的配置文件中。这里根据自身项目需要来选择插件是否安装,比如Vuex需要就选中不需要就不选。


8.配置

一般需要选中把router设置为history,因为后端也要处理;选择ESLint的模式,选中ESLint-Standard标准模式;然后选择save保存的时候校验。然后点击下方创建项目按钮。


9.开始创建项目

个人认为小白不建议保存预设,多操作几次不是更加有印象吗


10.项目创建完成 仪盘表

等项目创建完成后自动切换到当前项目

11.安装插件 以Element-ui(PC端UI库)为例
  • 点击左侧菜单的插件按钮,可以查看项目中所用到的所有插件


  • 点击上图右上角的安装插件进入查找插件页面,输入框内输入要安装的插件名称,选中你要安装的插件后点击右下方的安装按钮进行安装插件。


  • 插件安装完成后点击Fully import选择框,选择Import on demand按需导入。然后点击完成安装。


12.安装项目依赖 以Axios(Vue官方推荐的网络请求)为例
  • 点击左侧依赖菜单,进入项目依赖页。可以看到所有的运行依赖和开发依赖。每个依赖项后都有个删除按钮,可以手动点击删除当前依赖。


  • 点击上图右上角安装依赖按钮进入搜索页面,输入项目需要的依赖然后选中后点击下方安装按钮。


13.配置项
  • 这里可以配置一些基础设置和CSS的一些设置
14.任务 serve
  • serve 开发环境,点击运行按钮,等项目编译完后点击启动app按钮后自动开发项目 。



15.vue-cli3.0项目目录

和2.0版本相比少了很多配置

16.任务 build

我们点击build的运行按钮,进行打包项目,打包完成后往下滑可以查看资源和依赖库文件的大小,还会在项目目录中生成一个dist文件夹就是打包后的成果。

优化项目

1.添加进度条

给项目添加进度条效果,先打开项目控制台,打开依赖,安装nprogress,打开main.js,编写如下代码

//导入进度条插件
import NProgress from 'nprogress'
//导入进度条样式
import 'nprogress/nprogress.css'
.....
//请求在到达服务器之前,先会调用use中的这个回调函数来添加请求头信息
axios.interceptors.request.use(config => {
  //当进入request拦截器,表示发送了请求,我们就开启进度条
  NProgress.start()
  //为请求头对象,添加token验证的Authorization字段
  config.headers.Authorization = window.sessionStorage.getItem("token")
  //必须返回config
  return config
})
//在response拦截器中,隐藏进度条
axios.interceptors.response.use(config =>{
  //当进入response拦截器,表示请求已经结束,我们就结束进度条
  NProgress.done()
  return config
})
2.build阶段移除所有的console信息

安装一个插件(babel-plugin-transform-remove-console)在项目build阶段移除所有的console信息,打开项目控制台,点击依赖->开发依赖,输入babel-plugin-transform-remove-console,安装插件。打开babel.config.js,编辑代码如下:

//项目发布阶段需要用到的babel插件
const productPlugins = []

//判断是开发还是发布阶段
if(process.env.NODE_ENV === 'production'){
  //发布阶段
  productPlugins.push("transform-remove-console")
}

module.exports = {
  "presets": [
    "@vue/app"
  ],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ],
    ...productPlugins
  ]
}
3.修改webpack的默认配置

默认情况下,vue-cli 3.0生成的项目,隐藏了webpack配置项,如果我们需要配置webpack,需要通过vue.config.js来配置。在项目根目录中创建vue.config.js文件

module.exports = {
    chainWebpack:config=>{
        //发布模式
        config.when(process.env.NODE_ENV === 'production',config=>{
            //entry找到默认的打包入口,调用clear则是删除默认的打包入口
            //add添加新的打包入口
            config.entry('app').clear().add('./src/main-prod.js')
        })
        //开发模式
        config.when(process.env.NODE_ENV === 'development',config=>{
            config.entry('app').clear().add('./src/main-dev.js')
        })
    }
}
4.加载外部CDN

默认情况下,依赖项的所有第三方包都会被打包到js/chunk-vendors.js文件中,导致该js文件过大;

  • 可以在vue.config.js中通过externals排除这些包,使它们不被打包到js/chunk-vendors.js文件中
module.exports = {
    chainWebpack:config=>{
        //发布模式
        config.when(process.env.NODE_ENV === 'production',config=>{
            //entry找到默认的打包入口,调用clear则是删除默认的打包入口
            //add添加新的打包入口
            config.entry('app').clear().add('./src/main-prod.js')

            //使用externals设置排除项
            config.set('externals',{
                vue:'Vue',
                'vue-router':'VueRouter',
                axios:'axios',
                'element-ui': 'ElementUI',
                echarts:'echarts'
                ...根据自己项目中用到的库
            })
        })
        //开发模式
        config.when(process.env.NODE_ENV === 'development',config=>{
            config.entry('app').clear().add('./src/main-dev.js')
        })
    }
}
  • 设置好排除之后,为了使我们可以使用vue,axios等内容,我们需要加载外部CDN的形式解决引入依赖项。打开开发入口文件main-prod.js,删除掉默认的引入代码
5.定制首页内容

开发环境的首页和发布环境的首页展示内容的形式有所不同;我们可以通过插件的方式来定制首页内容,打开vue.config.js,编写代码如下:

module.exports = {
    chainWebpack:config=>{
        config.when(process.env.NODE_ENV === 'production',config=>{
            ......
            
            //使用插件
            config.plugin('html').tap(args=>{
                //添加参数isProd
                args[0].isProd = true
                return args
            })
        })

        config.when(process.env.NODE_ENV === 'development',config=>{
            config.entry('app').clear().add('./src/main-dev.js')

            //使用插件
            config.plugin('html').tap(args=>{
                //添加参数isProd
                args[0].isProd = false
                return args
            })
        })
    }
}

然后在public/index.html中使用插件判断是否为发布环境并定制首页内容;

<!DOCTYPE html>
<html lang="en">
 <head>
   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width,initial-scale=1.0">
   <link rel="icon" href="<%= BASE_URL %>favicon.ico">
   <title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>电商后台管理系统</title>

 </head>
 .......
6.路由懒加载

当路由被访问时才加载对应的路由文件,就是路由懒加载。

  • 1.安装 @babel/plugin-syntax-dynamic-import

打开vue控制台,点击依赖->安装依赖->开发依赖->搜索@babel/plugin-syntax-dynamic-import点击安装。

  • 2.在babel.config.js中声明该插件,打开babel.config.js
//项目发布阶段需要用到的babel插件
const productPlugins = []

//判断是开发还是发布阶段
if(process.env.NODE_ENV === 'production'){
  //发布阶段
  productPlugins.push("transform-remove-console")
}

module.exports = {
  "presets": [
    "@vue/app"
  ],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ],
    ...productPlugins,
    //配置路由懒加载插件
    "@babel/plugin-syntax-dynamic-import"
  ]
}
  • 3.将路由更改为按需加载的形式,打开router.js,更改引入组件代码如下:
import Vue from 'vue'
import Router from 'vue-router'
const Login = () => import(/* webpackChunkName:"login_home_welcome" */ './components/Login.vue')
// import Login from './components/Login.vue'
const Home = () => import(/* webpackChunkName:"login_home_welcome" */ './components/Home.vue')
// import Home from './components/Home.vue'
......
7.项目上线

通过node创建服务器,首先创建一个文件夹server(名字随便起)来存放node服务器,使用终端打开server文件夹,输入命令 npm init -y初始化包之后,输入命令 npm i express -S安装Express,然后打开我们项目目录,复制dist文件夹,粘贴到server文件夹中,在server文件夹中创建app.js文件,编写代码如下:

const express = require('express')
const app = express()
app.use(express.static('./dist'))
app.listen(8998,()=>{
    console.log("server running at http://127.0.0.1:8998")
})

然后再次在终端中输入 node app.js 然后在浏览器输入你的电脑的ip加端口就可以打开了。

8.使用pm2管理应用

当在本地通过命令行启动服务后,关闭命令窗口后服务就会自动关闭掉,是不是很气人!通过pm2就会避免这种情况;

  • 1.打开server文件夹的终端,输入命令:npm i pm2 -g,安装pm2;
  • 2.使用pm2启动项目,在终端中输入命令:pm2 start app.js --name 自定义名称,开启服务;
  • 3.查看项目列表命令:pm2 ls;
  • 4.重启项目:pm2 restart 自定义名称;
  • 5.停止项目:pm2 stop 自定义名称;
    +6.删除项目:pm2 delete 自定义名称;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270