使用ES6+Vue+webpack+gulp构建新一代Web应用
1.推荐学习网站:Vue.js中国
2.Demo环境搭建:
2.1环境配置
安装nodejs环境,具体内容可以百度;
新建一个文件夹:
mkdir VUE-ES6-WebPack
全局安装gulp:
npm install gulp -g
全局安装webpack:
npm install webpack -g
2.2webpack使用
在VUE-ES6-WebPack目录先新建一个webpack.config.js文件,然而,webpack是啥?
它本身是一个打包工具,可以把js、css、image打包成一个或者多个js文件,并且可以支持各种loader作为插件对不同类型的文件做转换处理。
实际上webpack就是通过插件vue-loader在加载vue类型的文件时做格式转换,把vue类型文件翻译为浏览器可以识别的js文件。粘贴以下代码:
1 module.exports = { 2 // 这是一个入口文件 3 entry: './resource/js/main.js', 4 // 编译后的文件路径 5 output: { 6 //`dist`文件夹 7 path: './resource/dist', 8 // 文件 `build.js` 即 dist/build.js 9 filename: 'build.js' 10 }, 11 module: { 12 loaders: [ 13 { 14 //处理ES6语法 15 test: /\.js$/, 16 //loader babel 17 loader: 'babel', 18 exclude: /node_modules/ 19 }, 20 { 21 //处理.vue文件 22 test: /\.vue$/, 23 loader: 'vue' 24 } 25 ] 26 }, 27 vue: { 28 loaders: { 29 js: 'babel' 30 } 31 } 32 }
再新建一个package.json文件用于管理依赖:
1 { 2 "name": "test", 3 "version": "1.0.0", 4 "description": "", 5 "main": "main.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "author": "MonkeyWang", 10 "license": "ISC", 11 "dependencies": { 12 "babel-core": "^6.1.2", 13 "babel-loader": "^6.1.0", 14 "babel-plugin-transform-runtime": "^6.1.2", 15 "babel-preset-es2015": "^6.1.2", 16 "babel-preset-stage-0": "^6.1.2", 17 "babel-runtime": "^5.8.0", 18 "css-loader": "^0.23.0", 19 "gulp": "^3.9.1", 20 "jade-loader": "^0.8.0", 21 "style-loader": "^0.13.0", 22 "stylus": "^0.54.5", 23 "stylus-loader": "^2.3.1", 24 "template-html-loader": "0.0.3", 25 "then-jade": "^2.4.3", 26 "vue": "^2.1.0", 27 "vue-hot-reload-api": "^1.2.0", 28 "vue-html-loader": "^1.2.3", 29 "vue-loader": "^7.3.0", 30 "webpack": "^1.13.3" 31 } 32 }
新建gulpfile.js:
1 var webpackConfig = require('./webpack.config.js'); 2 var gulp = require('gulp'); 3 var webpack = require("webpack"); 4 gulp.task("webpack", function(callback) { 5 var myConfig = Object.create(webpackConfig); 6 webpack(myConfig, function(err, stats) { 7 callback(); 8 }); 9 }); 10 gulp.task('watchVue',function(){ 11 gulp.watch(['resource/js/**/*.vue','resource/js/**/*.js'], ['webpack']); 12 });
安装依赖:
npm install
通过webpack.config.js入口配置可以知道 我们需要新建入口文件,项目目录可以参考:
新建main.js:
import是ES6的模块语法。这里为了更多的体现Vue的功能,采用了vue的单文件组件,这里定义了一个App组件:
1 /** 2 * Created by monkeywang. 3 */ 4 import Vue from '../../node_modules/vue/dist/vue' 5 import App from './componets/app.vue' 6 7 new Vue({ 8 el: '#app', 9 data: { 10 message: "Hello Vue" 11 }, 12 components: { App } 13 });
新建app.vue组件:
1 <template> 2 <div class="message">{{msg}}</div> 3 </template> 4 5 <script> 6 export default { 7 data () { 8 return { 9 msg: 'Hello Monkey Wang' 10 } 11 } 12 } 13 </script> 14 15 <style lang="stylus" rel="stylesheet/stylus"> 16 .message 17 color blue 18 </style>
当然<template></template>也可以使用jade模板引擎
1 <template lang="jade"> 2 .message{{msg}} 3 </template> 4 5 <script> 6 export default { 7 data () { 8 return { 9 msg: 'Hello Monkey Wang' 10 } 11 } 12 } 13 </script> 14 15 <style lang="stylus" rel="stylesheet/stylus"> 16 .message 17 color blue 18 </style>
非常大的一个亮点!一个vue文件,内部js、css、html就都齐了,可以作为一个完整的、自包含的组件了。非常有趣的、我个人极为欣赏的web components就在此处了。
vue文件内的语法,当然不是浏览器所可以支持的,浏览器不认识它!魔术在于webpack+vue-loader+babel 。
webpack加载vue文件首先调用vue-loader,vue-loader会调用babel转换ES6代码为ES5代码,把css和html作为模块也转换为客户端js代码。这些js代码浏览器就可以识别了。
编译Vue:
gulp webpack
监听文件变动:
gulp watchVue
一切就绪,准备开始你的Vue.js和Es6的开发体验吧!