一个基于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 [email protected]1.11.3 --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

真是激动了我三生三世,终于成功了

四、结语

这两个小demo写到这里终于告一段落,如果大家在运行过程中有什么问题,我们可以相互探讨,一起进步!

ps:可能这篇文章有些图片在浏览器上看起来偏小不太清晰,各路高手自行ctrl+滚轴哈!

代码地址:https://github.com/Nangxif/ES6-demo请大家多多支持

时间: 2024-10-04 07:00:48

一个基于ES6+webpack的vue小demo的相关文章

如何搭建一个基于 Egg + Webpack + Vue 的服务端渲染工程项目呢?

如何搭建一个基于 Egg + Webpack + Vue 的服务端渲染工程项目呢? 项目你可以通过 easywebpack-cli 直接初始化即可完成或者clone egg-vue-webpack-boilerplate.下面说明一下从零如何搭建一个Egg + Webpack + Vue 的服务端渲染工程项目. 通过 egg-init 初始化 egg 项目 egg-init egg-vue-ssr // choose Simple egg app 安装 easywebpack-vue 和 egg

Nancy之基于Self Hosting的补充小Demo

前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self Hosting Nancy.和Owin 下面的Self Hosting作个补充. 首先是Self Hosting Nancy的补充: 这里主要是介绍一下Topshelf 官网:http://topshelf-project.com/ GitHub地址:https://github.com/Topshe

培训准备-做一个完全由动画实现的小demo

描述 这个demo其实就是一个小蜜蜂类的游戏,只不过它全部是动画来实现的模拟 上面是小蜜蜂,刚开始不动 下面是坦克,跟据小蜜蜂的位置,转移到它正下方,发射子弹 (这个子弹也是一个动画,就是一个image从屏幕下方出来) 打中蜜蜂,蜜蜂开始移动 坦克跟着移动 蜜蜂打中一定次数以后,这时候蜜蜂颜色变红,血量减少 最后爆炸

简单罗列es6中常用的小demo

### 变量相关的letconst 1. 都不可以重复声明2. 都有块级作用域 const必须在声明的时候赋值const声明的变量不能被修改值 ### 对象相关的1. 对象的简写```jsvar name = "王XX": var obj = { name: name}// 简写如下var obj = { name} var obj = { sayHello: function(){ }} // 简写如下var obj = { sayHello(){ }}``` ### 解构赋值```

jQuery 中 ajax 提交数据应用的一个小demo

举一个jquery中ajax的应用小 demo 便于以后的更多项目拓展 ,这里要注意的是保存的文件名问题 ... ajax02.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="form&qu

jQuery 中 ajax 请求数据应用的一个小demo

举一个jquery中ajax的应用小 demo 便于以后的更多项目拓展 ,这里要注意的是保存的文件名和文件图片路径问题 ... ajax01.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> ajax小例子 </title> </head> <body> <!--

webpack配合vue.js实现完整的单页面demo

本篇文章主要是我在开发前研究了webpack+vue.js的单页面应用,因为需要用到node的npm,所以确保安装了node,建议官网安装最新的稳定版本.并且在项目中需要加载一些npm包,由于npm的服务器在国外,可能我们下载的过程会比较慢,所以建议用阿里的镜像cnpm安装,10分钟实时更新一次npm的镜像.具体的下载配置参考阿里的cnpm官网.本文章只是和大家探讨怎么利用webpack配合vue.js做一个单页面应用,具体关于vue里面的内容怎么写并不在本篇文章的介绍范围. 1. 定义我们de

Nancy之基于Nancy.Owin的小Demo

前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katana 什么是Owin呢? 官网地址:http://owin.org OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application. 什么是Katana呢? 官网地址:http://kata

简述人脸特异性识别&amp;&amp;一个基于LBP和SVM的人脸识别小例子

原谅我用图片,MAC在Safari里给文章进行图文排版太麻烦啦~ 本文适合初入计算机视觉和模式识别方向的同学们观看~ 文章写得匆忙,加上博主所知甚少,有不妥和勘误请指出并多多包涵. 本文Demo的代码由HZK编写,特征点由月神和YK选择和训练. 转载请注明 copyleft by sciencefans, 2014 为了方便大家学习,附上高维LBP的核心代码 1 ################################################### 2 # 3 # 4 # NO