一个基于ES6+webpack的vue小demo
上一篇文章《一个基于ES5的vue小demo》我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo。
一、环境搭建及代码转换
我们先搭建一下vue 的开发环境,根据我的一篇随笔《Vue开发环境搭建及热更新》,我们一步步搭建开发环境,project名为ES6-demo。
在之前我发表的一篇随笔《 理解最基本的Vue项目》中,说到了在放置组件和入口文件的src文件夹中,main.js文件就是入口文件,App.vue是主组件,所有组件都是在App.vue下进行切换的。components文件夹就是存放组件的地方,像我们这个项目,里面一开始就只是存放着一个Hello组件,assets文件夹存放的是图片,router文件夹存放的是路由文件。
我们从之前ES5写的demo来看,我们总共需要建立四个组件文件,分别为Play.vue,Home.vue,Time.vue,About.vue。下面是修改后的src的目录
--assets
--components//组件
------About.vue
------Home.vue
------Play.vue
------Time.vue
--router//路由
------index.js
--App.vue//主组件
--main.js//入口文件
我们来依次看一下这些里面的代码是什么样的
About.vue
<template>
<div>
<h1>About</h1>
<p>{{msg2}}</p>
</div>
</template>
<script>
export default{
name:'about',
data(){
return{
msg2:'This is About page!'
}
}
}
</script>
About.vue
Home.vue
<template>
<div>
<h1>Home</h1>
<p>{{msg1}}<router-link to="/play/home/time" class="btn">获取当前日期</router-link></p>
<router-view></router-view>
</div> </template>
<script>
export default{
name:'home',
data(){
return{
msg1:'This is Home page!'
}
}
}
</script>
Home.vue
Play.vue
<template>
<div class="container">
<div class="row">
<div class="col-md-2 col-md-offset-2">
<div class="list-group">
<router-link to="/play/home" class="list-group-item">Home</router-link>
<router-link to="/play/about" class="list-group-item">About</router-link>
</div>
</div>
<div class="col-md-6">
<div class="panel">
<div class="panel-body">
<router-view></router-view>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default{
name:'play'
}
</script>
Play.vue
Time.vue
<template>
<table class="table table-striped">
<tr>
<td>年份</td>
<td>月份</td>
<td>日</td>
</tr>
<tr v-for="t in dates">
<td>{{t.year}}</td>
<td>{{t.month}}</td>
<td>{{t.day}}</td>
</tr>
</table>
</template>
<script>
export default{
name:'time',
data(){
const D = new Date();
return{
dates:[{
year:D.getFullYear(),
month:D.getMonth()+1,
day:D.getDate()
}]
}
}
}
</script>
Time.vue
index.js
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import Play from '@/components/Play'
import Time from '@/components/Time'
import About from '@/components/About' Vue.use(Router) export default new Router({
routes: [
{
path: '/play',
name: 'play',
component: Play,
children: [
{
path: '/play/home',
name: 'home',
component: Home,
children:[{
path:'/play/home/time',
name:'time',
component:Time
}]
},
{
path: '/play/about',
name: 'about',
component: About
}
]
}]
})
index.js
App.vue
<template>
<div class="container">
<div class="jumbotron">
<h1>A Demo!</h1>
<p>Let's play a demo</p>
<p><router-link to="/play" class="btn btn-primary btn-lg">play</router-link></p>
</div>
</div>
<router-view></router-view>
</template>
<script>
export default{
name:'app'
}
</script>
App.vue
main.js
import Vue from 'vue'
import App from './App'
import router from './router/index.js' Vue.config.productionTip = false new Vue({
router,
template: '<App/>',
components: { App }
})
main.js
二、错误修改
我们先暂时将ES5的demo改为这样,最好是先理解每个文件的作用,再来看这几段代码。这个项目运行之后,会出现一些错误,我们来看看。
这个错误的意思是vue模板只能有一个根对象,而我们把<router-view>放在<div>外面了,所以你想要出现正常的效果,在App.vue文件中直接把<router-view>放到<div>里面就可以了,我们改过之后再来试试看
你会看到这里面大概就是说哪里哪里有空格,所以就错误了,但是等你回去看代码的时候,你会发现,你这么写语法是对的呀!这是因为你打开了eslint这个插件,eslint是语法检查工具,但限制太过于严格,大部分开发人员无法适应,所以我们还是把它关掉吧。这个插件是在你创建webpack模板的时候(《 Vue开发环境搭建及热更新》第三点),Use ESLint to lint your code? (Y/n) 这一步选择了yes
要关掉这个功能直接选no就行了,万一安装了怎么办,别怕。在build文件夹里面找到webpack.base.conf.js,删掉里面这一段就行了
再运行一下,这次我们发现cmd不报错能运行了,但是界面里面却什么东西都没有渲染出来,打开控制台也没有什么错误。检查了很久我才发现,原来在main.js里面,我们居然忘了将这些组件挂载到index.html里面id为app的div上,main.js是入口文件,打包之后会产生app.js,然后导入index.html中,所以我们将main.js的代码改为
new Vue({
el: '#app',//加上这一句
router,
template: '<App/>',
components: { App }
})
运行完之后,苍天啊!终于有效果了。
三、使用bootstrap
每个按钮都正常运作,不过我们给他们设置的样式没有渲染出来,这是肯定的,我们没有导入bootstrap.js和bootstrap.css。
我们首先要先安装jQuery,先在cmd命令行中输入
npm install jquery@1.11. --save-dev
再来配置一下jQuery,在build/webpack.base.conf.js文件中,在module.exports里面再加入一段代码
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery"
})
]
还要记得在该文件开头,导入webpack
var webpack = require('webpack')
否则将会出现下面的错误
然后去bootstrap官网下载bootstrap包,我们这里使用的是3.3.7版本,下载下来后将fonts,js,css文件夹分别放到项目目录/src/assets下。
最后是引用bootstrap。我们在src/main.js文件的顶部加入如下对bootstrap主要文件的引用。
import './assets/css/bootstrap.min.css'
import './assets/js/bootstrap.min'
其实本来bootstrap也是需要配置的,但是在build/webpack.base.conf.js文件中moudle的rules设定中都已经包含对字体文件的打包设置
不用我们去弄了。
让我们一起迎接接下来这一神圣的时刻,打包,在cmd输入
cnpm run build
生成dist文件夹,最后我们在本地服务器上运行,在cmd输入
cnpm run dev
真是激动了我三生三世,终于成功了
四、结语
代码地址:https://github.com/Nangxif/ES6-demo请大家多多支持
一个基于ES6+webpack的vue小demo的更多相关文章
- 一个基于ES5的vue小demo
由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...
- Nancy之基于Nancy.Hosting.Self的小Demo
继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...
- Nancy之基于Self Hosting的补充小Demo
前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...
- wpf+xml实现的一个随机生成早晚餐的小demo
话说每到吃完的时间就发愁,真的不知道该吃什么,然后就想到做一个生成吃什么的小软件,既然这个软件如此的简单,就打算用wpf开发吧,也不用数据库了,直接保存在xml中就可以了 程序整体结构如下图 首先我写 ...
- 一个基于H5audio标签的vue音乐播放器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue小demo易错点总结
1.在使用<transiton>添加过渡效果时,对应的标签需使用<router-link>,否则,transition不会达到应有的效果. 2.在路由文件里获取根实例时,需通过 ...
- 一个基于时间注入的perl小脚本
use strict; use warnings; use LWP::Simple; my %table_and_leng; ;;$count++){ #print "Test Table: ...
- 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo
简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...
随机推荐
- PHP源码阅读strtr
strtr 转换字符串中特定的字符,但是这个函数使用的方式多种. echo strtr('hello world', 'hw', 'ab'); // 第一种 aello borld echo strt ...
- tp框架---验证码详解
很多注册登录界面都会验证码,用tp如何实现验证码的功能呢? 在tp中:Think\Verify类可以支持验证码的生成和验证功能. 首先,看一下逻辑: (1)如何生成?------ 先做Yanzheng ...
- (转)Java线程:新特征-线程池
Java线程:新特征-线程池 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利 ...
- (转)认识java中的堆和栈
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- 快速搭建MySQL复制集
快速搭建MySQL复制集 1 环境说明 MySQL版本 5.6 basedir :/u01/my3306 #MySQL软件目录 数据目录 :/u01/mysql/[实例名]/data 日志目录 :/u ...
- vim 配置插件
vim插件可以用bundle管理,我这里面用的是一个开源的Vundle工具,git上操作步骤说的很清楚https://github.com/VundleVim/Vundle.vim 之前PluginI ...
- 消息队列中间件 RocketMQ 源码分析 —— Message 存储
- [js高手之路] es6系列教程 - 箭头函数详解
箭头函数是es6新增的非常有意思的特性,初次写起来,可能会觉得别扭,习惯之后,会发现很精简. 什么是箭头函数? 箭头函数是一种使用箭头( => )定义函数的新语法, 主要有以下特性: 不能通过n ...
- 笔记本电脑连接上WiFi后,弹不出登录界面怎么办?
以CMCC为例子 步骤: 1 连接成功CMCC之后,打开适配器设置.右击无线网卡,选择属性 2.双击INTERNET协议版本4 3.将DNS改成自动获取,然后确定 4.再确定 5.然后重新断开CMCC ...
- 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。
namespace test2 { class Program { /// <summary> /// 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的 ...