Vue-CLI基本使用 / elementUI / MintUI / Vant / Plugin

一.Vue-CLI基本使用

  • 什么是Vue-CLI (Command Line Interface)?
    Vue -CLI是vue官方提供的脚手架工具,默认已经帮我们搭建好了一套利用webpack管理vue的项目结构

  • 如何安装Vue -cli和使用Vue -CLI?
    安装脚手架工具: npm install -g @vue/cli
    检查是否安装成功: vue --version
    通过脚手架创建项目: vue create project-name

  • 通过Vue -CLI生成的项目结构
     在Vue -CLI2.x中生成的项目结构中我们能够看到build文件夹和config文件夹这两个文件夹中存储了webpack相关的配置,我们可以针对项目需求修改webpack配置
     在Vue -CLI3以后生成的项目结构中已经没有了build文件夹和config文件夹
    这么做的目的是为了化繁为简,让开发者不用关心webpack,只用关心如何使用Vue
    node_ modules文件夹:存储了依赖的相关的包
    public文件夹: 一般用于存储一些永远不会改变的静态资源或者webpack不支持的第三方库。任何放置在public 文件夹的静态资源都会被简单的复制,而不经过webpack。 开发者需要通过绝对路径来引用它们。
    src文件夹:代码文件夹
       |---assets文件夹:存储项目中自己的一些静态文件(图片/字体等)
       |---components文件夹:存储项目中的自定义组件(小组件,公共组件)
       |---views文件夹:存储项目中的自定义组件(大组件,页面级组件,路由级别组件)
       |---router文件夹:存储VueRouter相关文件 (配置路由)
       |---store文件夹: 存储Vuex相关文件
       |---App.vue文件:根组件
       |---main.js文件:Vue的入口js文件

  • 修改webpack的配置
    Vue-CLI为了方便起见对webpack原有的属性进行了一 层封装, 如果我们需要修改webpack的配置,那么我们可以在项目中新建一个 vue.config.js的文件,在此文件中使用Vue-CLI封装的configureWebpack属性来修改webpack的配置。

例如:想要修改输出目录名称
原来修改输出目录名称的方式:

const path = require('path')

module.exports = {
   output: {
     path: path.resolve(__dirname, 'bundle')
 }
}

利用Vue-CLI创建项目后,修改输出目录名称的方式:

const webpack = require('webpack')

// vue.config.js
module.exports = {
  /* 修改打包以后的目录名称 */
  outputDir: 'bundle',
  /* 如果不可以满足我们的需求,那么我们可以通过configureWebpack的属性来编写原生的webpack配置 */
  configureWebpack: {
    /* 就可以在这个对象中编写原生的webpack配置 */
    /* 在webpack中添加插件需要写在plugins中 */
    plugins: [
      /* 之后每一个打包好的文件中都会有 ‘勿忘@注’的注释开头 */
      new webpack.BannerPlugin({
        banner: '勿忘@注'
      })
    ]
  }

}

二.elementUI

  • 什么是elementUI?
    ElementUI是饿了么前端团队推出的一款基于Vue.js 的桌面端UI框架
    和Bootstrap一样对原生的HTML标签进行了封装, 让我们能够专注于业务逻辑而不是UI界面
  • 如何安装elementUI?
    npm安装:npm i element-ui -S
  • 完整引入ElementUI

在main.js文件中写入:

import Vue from 'vue';
import App from './App.vue';
// 1.导入elementUI和elementUI的css文件
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

// 2.告诉Vue,我们在项目中需要用的elementUI
Vue.use(ElementUI);

new Vue({
 el: '#app',
 render: h => h(App)
});
  • 按需引入ElementUI

1.借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。首先,安装 babel-plugin-component:npm install babel-plugin-component -D

2.修改 .babelrc的配置文件

module.exports = {
 "presets": [
     ["@vue/cli-plugin-babel/preset", { "modules": false }]
  ],
 "plugins": [
   [
     "component",
     {
       "libraryName": "element-ui",
       "styleLibraryName": "theme-chalk"
     }
   ]
 ]
}

3.在main.js文件中写入:

import Vue from 'vue';
import App from './App.vue';
//1.如果你只希望引入部分组件,比如 Button 和 Switch,就只需要导入这两个组件
import { Button, Switch } from 'element-ui'
// 注意点:在elementUI中按需引入可以不用导入css文件
// import 'element-ui/lib/theme-chalk/index.css'

// 2.告诉Vue,我们在项目中需要用的elementUI
Vue.use(ElementUI);

new Vue({
 el: '#app',
 render: h => h(App)
});

三.MintUI

  • 什么是mintUI?
    mintUI是饿了么前端团队推出的一款基于Vue.js 的移动端UI框架
  • 如何安装mintUI?
    npm安装:npm install mint-ui -S
  • 完整引入mintUI

在main.js文件中写入:

import Vue from 'vue'
import App from './App'
// 1.导入mintUI和mintUI的css文件
import MintUI from 'mint-ui'
import 'mint-ui/lib/style.css'

// 2.告诉Vue,我们在项目中需要用的mintUI
// component注册全局组件
Vue.component(Button.name, Button)
Vue.component(Tabbar.name, Tabbar)
Vue.component(TabItem.name, TabItem)

/* eslint-disable no-new */
new Vue({
 el: '#app',
 render: c => c(App)
})
  • 按需引入mintUI

1.借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。首先,安装 babel-plugin-component:npm install babel-plugin-component -D

2.修改 .babelrc 文件中的配置

module.exports = {
 presets: [
   ['@vue/cli-plugin-babel/preset', { 'modules': false }]
 ],
 plugins: [['component',
   {
     'libraryName': 'mint-ui',
     'style': true
   }
 ]]
}

3.在main.js文件中写入:

import Vue from 'vue'
import App from './App'
// 1.如果你只希望引入部分组件,比如 Button, Tabbar和TabItem ,就只需要导入这三个组件
import { Button, Tabbar, TabItem } from 'mint-ui'
// 注意点:在MintUI中哪怕是按需引入也必须导入css文件
import 'mint-ui/lib/style.css'

// 2.告诉Vue,我们在项目中需要用的mintUI
// component注册全局组件
Vue.component(Button.name, Button)
Vue.component(Tabbar.name, Tabbar)
Vue.component(TabItem.name, TabItem)

/* eslint-disable no-new */
new Vue({
 el: '#app',
 render: c => c(App)
})

四.Vant

  • 什么是Vant?
    Vant是有赞前端团队推出的一款基于Vue.js 的移动端UI框架,适合做电商
  • 如何安装Vant?
    npm安装: npm install -g @vue/cli
  • 推荐按需引入

1.babel-plugin-import 是一款 babel 插件,它会在编译过程中将 import 的写法自动转换为按需引入的方式。首先,安装babel-plugin-import:npm i babel-plugin-import -D

2.在babel.config.js 文件中配置

module.exports = {
 presets: [
   ['@vue/cli-plugin-babel/preset', { 'modules': false }]
 ],
 plugins: [
   ['import', {
     libraryName: 'vant',
     libraryDirectory: 'es',
     style: true
   }, 'vant']
 ]
}

3.在main.js文件中写入

import Vue from 'vue'
import App from './App'
// 1.如果你只希望引入部分组件,比如NavBar, Card, GoodsAction, GoodsActionIcon, GoodsActionButton  ,就只需要导入这些个组件
import { NavBar, Card, GoodsAction, GoodsActionIcon, GoodsActionButton } from 'vant'
//2.导入vant的css文件
import 'vant/lib/index.css'
// 3.告诉Vue,我们在项目中需要用的Vant
Vue.use(NavBar)
Vue.use(Card)
Vue.use(GoodsAction)
Vue.use(GoodsActionIcon)
Vue.use(GoodsActionButton)

/* eslint-disable no-new */
new Vue({
 el: '#app',
 render: c => c(App)
})

五.Plugin

  • Vue.use()做了什么事情?
    Vue.use的作用是注册一个Vue插件(注册组件)。
    除了利用component/components注册组件以外,还可以通过vue.use(XXX)来注册组件,但前提是XXX必须是是一个封装好的插件并且Vue.use(XXX)必须在new Vue()之前使用。

  • 什么时候需要定义插件?
    当某一个组件或者功能经常需要被使用到时,我们就可以将这个组件或者功能定义成一个插件

  • 如何封装一个插件?

1.在 main.js文件中通过use()来创建组件(前提是写在use()中的组件必须是以一个封装好的插件)

import Vue from 'vue'
import App from './App.vue'
import store from './store'

// 4.这里使用use来创建组件,只需要引入plugin目录下的index.js文件即可
import Loading from './plugin/loading/index.js'
// 方式三:通过use来创建组件,前提是写在use中的组件必须是以一个封装好的插件
Vue.use(Loading)

Vue.config.productionTip = false

new Vue({
 store,
 render: h => h(App)
}).$mount('#app')

2.在src目录下创建plugin目录,并且在plugin目录创建新的目录,命名为loading (因为我这里创建的组件是网络加载指示器,所以组件名称是Loading,组件所在文件就命名为Loading.vue),在Loading目录下粘贴components目录下的Loading.vue文件,在创建一个新的index.js文件(这里的一个文件就代表了一个组件)

3.在plugin目录下的index.js文中编写一下代码,就完成了把组件包装成插件的工作

import Vue from 'vue'
// 导入封装好的组件
import Loading from './Loading'

export default {
// 注意点:如果要将一个组件封装成一个插件,就必须用到install方法,并且在install方法中注册当前的组件
// 原理:只要调用use方法,use方法就会去调用插件的install方法,在install方法中册当前的组件,也就完成了把组件包装成插件的工作
 install: function () {
// 注册全局组件
  Vue.component(Loading.name, Loading)
   
}

4.附加:在plugin目录下Loading.vue文件中的网络加载指示器 代码

<template>
  <div class="container">
      <div class="loading"></div>
      <p class="title">正在加载...</p>
  </div>
</template>

<script>
export default {
 name: 'Loading'
 }
}
</script>

<style scoped lang="scss">
 .container{
     width: 200px;
     height: 200px;
     border-radius: 20px;
     background: rgba(0,0,0,0.5);
     position: absolute;
     left: 50%;
     top: 50%;
     transform: translate(-50%,-50%);
     .loading{
         width: 100px;
         height: 100px;
         border-radius: 50%;
         border: 5px solid #FFFFFF;
         margin: 20px auto;
         border-right-color: #3a8ee6;
         animation: loading 2s linear infinite;
     }
     .title{
         text-align: center;
         font-size: 16px;
         color: #fff;
     }
 }
   @keyframes loading {
        from{
            transform: rotate(0deg);
        }
       to{
          transform: rotate(360deg);
       }
   }
</style>
  • 为何要将组件封装成插件?将组件封装成插件的好处?
  1. 为组件扩展全局方法或者 property。如:vue-custom-element

  2. 为组件扩展全局资源:指令/过滤器/过渡等。如 vue-touch

  3. 为组件通过全局混入来添加一些组件选项。如 vue-router

  4. 为组件扩展 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。

  5. 一个库,提供自己的 API,同时提供上面提到的一个或多个功能。如 vue-router

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352