02_01 Vue.js与Webpack研究

1 Vue.js与Webpack研究

链接:https://pan.baidu.com/s/1_cxMH4M44kFknkXTet1u6Q

提取码:xook

1 vue.js研究

1.1 vue.js介绍

1、vue.js是什么?

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计

为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一

方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

渐进式框架:Progressive,说明vue.js的轻量,是指一个前端项目可以使用vue.js一两个特性也可以整个项目都用

vue.js。

自底向上逐层应用:作为渐进式框架要实现的目标就是方便项目增量开发。

参考:https://cn.vuejs.org/v2/guide/

2、Vue.js与ECMAScript

Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。

什么是ECMAScript?



ES6:http://www.ecma-international.org/ecma-262/6.0/

ES7:http://www.ecma-international.org/ecma-262/7.0/

3、Vue.js的使用

1)在html页面使用script引入vue.js的库即可使用。

2)使用Npm管理依赖,使用webpack打包工具对vue.js应用打包。

大型应用推荐此方案。

使用vue.js官方提供的CLI脚本架很方便去创建vue.js工程雏形。

4、vue.js有哪些功能?

1)声明式渲染

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统。

比如:使用vue.js的插值表达式放在Dom的任意地方, 差值表达式的值将被渲染在Dom中。

2)条件与循环

dom中可以使用vue.js提供的v-if、v-for等标签,方便对数据进行判断、循环。

3)双向数据绑定

Vue 提供v-model 指令,它可以轻松实现Dom元素和数据对象之间双向绑定,即修改Dom元素中的值自动修改绑

定的数据对象,修改数据对象的值自动修改Dom元素中的值。

4)处理用户输入

为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的

方法

5)组件化应用构建

vue.js可以定义一个一个的组件,在vue页面中引用组件,这个功能非常适合构建大型应用。

 1.2 vue.js基础


1.2.1 MVVM模式

vue.js是一个MVVM的框架,理解MVVM有利于学习vue.js。

MVVM拆分解释为:

Model:负责数据存储

View:负责页面展示

View Model:负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示

MVVM要解决的问题是将业务逻辑代码与视图代码进行完全分离,使各自的职责更加清晰,后期代码维护更

加简单

用图解的形式分析Ajax请求回来数据后直接操作Dom来达到视图的更新的缺点,以及使用MVVM模式是如何

来解决这个缺点的

Vue中的 MVVM


从上图看出,VM(ViewModel)可以把view视图和Model模型解耦合,VM的要做的工作就是vue.js所承担的。

1.2.2 入门程序

打开 webstrom

本次测试我们在门户目录中创建一个html页面进行测试,正式的页面管理前端程序会单独创建工程。

在门户目录中创建vuetest目录,并且在目录下创建vue_01.html文件

=========================

vue.js入门程序

{{name}}

这些指令就相当于是MVVM中的View这个角色 ‐‐>

==========================

启动 nginx  浏览器输入:http://www.xuecheng.com/vuetest/vue_01.html

代码编写步骤:

1、定义html,引入vue.js

2、定义app div,此区域作为vue的接管区域

3、定义vue实例,接管app区域。

4、定义model(数据对象)

5、VM完成在app中展示数据


1.2.3    1+1=2


=========================

   

    Title</p> <p>    <script src="/js/vue/vue.min.js"></p> <p><div  id="app"></p> <p>    {{name}}</p> <p>    <input type="text"  v-model="num1">+</p> <p><input type="text" v-model="num2">={{Number.parseInt(num1)+Number.parseInt(num2)}}</p> <p><button>计算</p> <p>    // 实例化Vue对象 //vm :叫做MVVM中的 View Model</p> <p>    var VM=new Vue({</p> <p>el :"#app",// 表示当前vue 接管app的div区域</p> <p>        data:{</p> <p>name :'lww', // 相当于是MVVM中的Model这个角色</p> <p>            num1 :1,</p> <p>            num2 :2</p> <p>        }</p> <p>})</p> <p></html></p> <p>=========================</p> <p>1、在表单控件或者组件上创建双向绑定 2、v-model仅能在如下元素中使用:</p> <p>input</p> <p>select</p> <p>textarea</p> <p>components(Vue中的组件)</p> <p>2、解决插值表达式闪烁问题,使用v-text</p> <p>v-text可以将一个变量的值渲染到指定的元素中,它可以解决插值表达式闪烁的问题</p> <h4> 3、v-on绑定一个按钮的单击事件</h4> <h4> 4、v-bind</h4> <p>====================</p> <p>1、作用:</p> <p>v‐bind可以将数据对象绑定在dom的任意属性中。</p> <p>v‐bind可以给dom对象绑定一个或多个特性,例如动态绑定style和class</p> <p>2、举例:</p> <p><img v‐bind:src="imageSrc"></p> <p><div v‐bind:style="{ fontSize: size + 'px' }"></div></p> <p>3、缩写形式</p> <p><img :src="imageSrc"></p> <p><div :style="{ fontSize: size + 'px' }"></div></p> <p><br></p> <p>=====================Eg</p> <p><!DOCTYPE html></p> <p><html lang="en"></p> <p>    <meta charset="UTF-8"></p> <p>    <title>Title</p> <p><div id="app"></p> <p><br></p> <p>    <span v-text="name"></p> <p>    <input type="text" v-model="num1">+</p> <p><input type="text" v-model="num2">=</p> <p><span v-text="result"></p> <p>    <button v-on:click="chang">计算</p> <p>    <a v-bind:href="url">360</p> <p>    <div :style="{ fontSize: size + 'px' }">divdiv</p> <p><script src="/js/vue/vue.min.js"></p> <p>    // 实例化Vue对象 //vm :叫做MVVM中的 View Model</p> <p>    var VM =new Vue({</p> <p>el:"#app",// 表示当前vue 接管app的div区域</p> <p>        data: {</p> <p>name:'lww', // 相当于是MVVM中的Model这个角色</p> <p>            num1:0,</p> <p>            num2:0,</p> <p>            result:0,</p> <p>            url:"https://hao.360.com/?wd=1000",</p> <p>            size:30</p> <p>        },</p> <p>        methods: {</p> <p>chang:function () {</p> <p>this.result = Number.parseInt(this.num1) + Number.parseInt(this.num2)</p> <p>alert("计算结果 " +this.result)</p> <p>}</p> <p>}</p> <p>})</p> <p></html></p> <p>=====================</p> <h4>1.2.4 v-if和v-for <br> </h4> <p>======================eg</p> <p><!DOCTYPE html></p> <p><html lang="en"></p> <p>    <meta charset="UTF-8"></p> <p>    <title>Title</p> <p>    <script src="/js/vue/vue.min.js"></p> <p><div  id="app"></p> <p>    {{name}}</p> <p><br></p> <p><br></p> <p>        <li v-for="(item,index) in list" :key="index" >{{index}}-{{item}}</p> <p>        <div >aaaaaaaaa</p> <p>        <li v-for="(item,index) in list" :key="index"  v-if="index % 2==0">{{index}}-{{item}}</p> <p>        <div >aaaaaaaaa</p> <p>        <li v-for ="(value,key) in user">{{key}}-{{value}}</p> <p>        <div >aaaaaaaaa</p> <p>        <li v-for="(item,index) in userlist" :key="item.user.uname">{{index}}‐{{item.user.uname}}‐{{item.user.age}}</p> <p>        <div >aaaaaaaaa</p> <p>        <li v-for="(item,index) in userlist" :key="item.user.uname"></p> <p>            <div v-if="item.user.uname=='lww'" style="background:chartreuse"></p> <p>            {{index}}‐{{item.user.uname}}‐{{item.user.age}}</p> <p>            <div v-else=""> {{index}}‐{{item.user.uname}}‐{{item.user.age}}</p> <p>    // 实例化Vue对象 //vm :叫做MVVM中的 View Model</p> <p>    var VM=new Vue({</p> <p>el :"#app",// 表示当前vue 接管app的div区域</p> <p>        data:{</p> <p>name :'lww',    // 相当于是MVVM中的Model这个角色</p> <p>            list:[1,2,3,4,5,6],</p> <p>            user:{uname:'lww',age:10},</p> <p>            userlist:[</p> <p>{user:{uname:'lww',age:10}},</p> <p>                {user:{uname:'jjj',age:11}}</p> <p>]</p> <p>}</p> <p>})</p> <p></html></p> <p>======================</p> <h1>1.3 webpack入门 <br> </h1> <p>使用vue.js开发大型应用需要使用webpack打包工具,本节研究webpack的使用方法。</p> <p>1.3.1 webpack介绍</p> <p>Webpack 是一个前端资源的打包工具,它可以将js、image、css等资源当成一个模块进行打包。</p> <p><br></p> <div class="image-package"> <div class="image-container" style="max-width: 700px; max-height: 355px;"> <div class="image-view"> </div> </div> <div class="image-caption"></div> </div> <p>从图中我们可以看出,Webpack 可以将js、css、png等多种静态资源 进行打包,使用webpack有什么好处呢?</p> <p>1、模块化开发</p> <p>程序员在开发时可以分模块创建不同的js、 css等小文件方便开发,最后使用webpack将这些小文件打包成一个文</p> <p>件,减少了http的请求次数。</p> <p>webpack可以实现按需打包,为了避免出现打包文件过大可以打包成多个文件。</p> <p>2、 编译typescript、ES6等高级js语法</p> <p>随着前端技术的强大,开发中可以使用javascript的很多高级版本,比如:typescript、ES6等,方便开发,</p> <p>webpack可以将打包文件转换成浏览器可识别的js语法。</p> <p>3、CSS预编译</p> <p>webpack允许在开发中使用Sass 和 Less等原生CSS的扩展技术,通过sass-loader、less-loader将Sass 和 Less的</p> <p>语法编译成浏览器可识别的css语法。</p> <p>webpack的缺点:</p> <p>1、配置有些繁琐</p> <p>2、文档不丰富</p> <h4>1.3.2 安装webpack <br> </h4> <h4>1.3.2.1 安装Node.js </h4> <p>webpack基于node.js运行,首先需要安装node.js。</p> <p><br></p> <div class="image-package"> <div class="image-container" style="max-width: 700px; max-height: 187px;"> <div class="image-view"> </div> </div> <div class="image-caption"></div> </div> <p>为什么会有node.js?</p> <p>传统意义上的 JavaScript 运行在浏览器上,Chrome 使用的 JavaScript 引擎是 V8,Node.js 是一个运行在服务端</p> <p>的框架,它的底层就使用了 V8 引擎,这样就可以使用javascript去编写一些服务端的程序,这样也就实现了用</p> <p>javaScript去开发 Apache + PHP 以及 Java Servlet所开发的服务端功能,这样做的好处就是前端和后端都采用</p> <p>javascript,即开发一份js程序即可以运行在前端也可以运行的服务端,这样比一个应用使用多种语言在开发效率上</p> <p>要高,不过node.js属于新兴产品,一些公司也在尝试使用node.js完成一些业务领域,node.js基于V8引擎,基于</p> <p>事件驱动机制,在特定领域性能出色,比如用node.js实现消息推送、状态监控等的业务功能非常合适。</p> <p>下边我们去安装Node.js:</p> <p>1、下载对应你系统的Node.js版本:</p> <p>https://nodejs.org/en/download/</p> <p> 2、选安装目录进行安装</p> <p>默认即可</p> <p>安装完成检查PATH环境变量是否设置了node.js的路径。</p> <p>3、测试</p> <p>在命令提示符下输入命令</p> <p>node ‐v</p> <p>会显示当前node的版本</p> <p>1.3.2.2 安装NPM</p> <p>1、自动安装NPM</p> <p>npm全称Node Package Manager,他是node包管理和分发的工具,使用NPM可以对应用的依赖进行管理,NPM</p> <p>的功能和服务端项目构建工具maven差不多,我们通过npm 可以很方便地下载js库,打包js文件。</p> <p>node.js已经集成了npm工具,在命令提示符输入 npm -v 可查看当前npm版本</p> <p>2、设置包路径</p> <p>包路径就是npm从远程下载的js包所存放的路径。</p> <p>使用 npm config ls 查询NPM管理包路径(NPM下载的依赖包所存放的路径)</p> <p><br></p> <div class="image-package"> <div class="image-container" style="max-width: 700px; max-height: 639px;"> <div class="image-view"> </div> </div> <div class="image-caption"></div> </div> <p>NPM默认的管理包路径在C:/用户/[用户名]/AppData/Roming/npm/node_meodules,为了方便对依赖包管理,我</p> <p>们将管理包的路径设置在单独的地方,本教程将安装目录设置在node.js的目录下,创建npm_modules和</p> <p>npm_cache,执行下边的命令:</p> <p>本教程安装node.js在D:\soft\javaEE\nodejs下所以执行命令如下:</p> <p>npm config set prefix "D:\soft\javaEE\nodejs\npm_modules"</p> <p>npm config set cache "D:\soft\javaEE\nodejs\npm_cache"</p> <p>此时再使用 npm config ls 查询NPM管理包路径发现路径已更改</p> <p><br></p> <p><br></p> <div class="image-package"> <div class="image-container" style="max-width: 525px; max-height: 338px;"> <div class="image-view"> </div> </div> <div class="image-caption"></div> </div> <h1>将npm_modules  添加到环境变量 path中</h1> <p>3、安装cnpm</p> <p>npm默认会去国外的镜像去下载js包,在开发中通常我们使用国内镜像,这里我们使用淘宝镜像</p> <p>下边我们来安装cnpm:</p> <p>有时我们使用npm下载资源会很慢,所以我们可以安装一个cnmp(淘宝镜像)来加快下载速度。</p> <p>输入命令,进行全局安装淘宝镜像。</p> <p>npm install -g cnpm --registry=https://registry.npm.taobao.org</p> <p>安装后,我们可以使用以下命令来查看cnpm的版本</p> <p>进入npm_modules  然后进cmd窗口</p> <p><br></p> <div class="image-package"> <div class="image-container" style="max-width: 700px; max-height: 184px;"> <div class="image-view"> </div> </div> <div class="image-caption"></div> </div> <p>nrm ls 查看镜像已经指向taobao</p> <p><br></p> <div class="image-package"> <div class="image-container" style="max-width: 700px; max-height: 252px;"> <div class="image-view"> </div> </div> <div class="image-caption"></div> </div> <p>使nrm use XXX切换 镜像</p> <p>如果nrm没有安装则需要进行全局安装:cnpm install -g nrm</p> <p>1.3.2.3 安装webpack </p> <p>1、连网安装</p> <p>webpack安装分为本地安装和全局安装:</p> <p>本地安装:仅将webpack安装在当前项目的node_modules目录中,仅对当前项目有效。</p> <p>全局安装:将webpack安装在本机,对所有项目有效,全局安装会锁定一个webpack版本,该版本可能不适用某个</p> <p>项目。全局安装需要添加 -g 参数。</p> <h4>1)本地安装:<br> </h4> <p>只在我的项目中使用webpack,需要进行本地安装,因为项目和项目所用的webpack的版本不一样。本地安装就会</p> <p>将webpack的js包下载到项目下的npm_modeuls目录下。</p> <p>在门户目录下创建webpack测试目录webpacktest01:</p> <p>npm install --save-dev webpack 或 cnpm install --save-dev webpack</p> <p>npm install --save-dev webpack-cli (4.0以后的版本需要安装webpack-cli)</p> <h4>2)全局安装加-g,如下: <br> </h4> <p>全局安装就将webpack的js包下载到npm的包路径下。</p> <p>npm install webpack -g 或 cnpm install webpack -g</p> <h4>3)安装webpack指定的版本: <br> </h4> <p>本教程使用webpack3.6.0,安装webpack3.6.0:</p> <p>进入webpacktest测试目录,运行:cnpm install --save-dev webpack@3.6.0</p> <p>全局安装:npm install webpack@3.6.0 -g或 cnpm install webpack@3.6.0 -g</p> <p>https://segmentfault.com/a/1190000013699050</p> <p>全局安装  npm install webpack-cli -g</p> <p>1.3.3 入门程序 </p> <p>通过本入门程序体会webpack打包的过程及模块化开发的思想。</p> <p>1.3.3.1 需求分析</p> <p>通过入门程序实现对js文件的打包,体会webpack是如何对应用进行模块化管理。</p> <p>对上边1+1=2的例子使用webpack进行模块化管理</p> <p><br></p> <div class="image-package"> <div class="image-container" style="max-width: 600px; max-height: 61px;"> <div class="image-view"> </div> </div> <div class="image-caption"> 、解决方法: 1.package.json中设置: "scripts": { "dev": "webpack --mode development", // 开发环境 "build": "webpack --mode production", // 生产环境 }, ———————————————— 版权声明:本文为CSDN博主「轨迹257」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/a4_9527/article/details/81045791 </div> </div> <p>1.3.3.2 定义模块</p> <p>创建webpacktest01目录,将vue.min.js及vue_02.html拷贝到目录下。</p> <p>1、定义model01.js</p> <p>在webpacktest01目录下创建model01.js</p> <p>将本程序使用的加法运算的js方法抽取到一个js文件,此文件就是一个模块</p> <p>=========================</p> <p>// 定义add函数</p> <p>function add(x, y) {</p> <p>return x + y</p> <p>}</p> <p>// function add2(x, y) {</p> <p>// return x + y+1</p> <p>// }</p> <p>// 导出add方法</p> <p>module.exports.add = add;</p> <p>// module.exports ={add,add2};//如果有多个方法这样导出</p> <p>// module.exports.add2 = add2//如果有多个方法也可以这样导出</p> <p>=========================</p> <p>2、定义main.js</p> <p>在webpacktest01目录下创建main.js,main.js是本程序的js主文件,包括如下内容:</p> <p>1、在此文件中会引用model01.js模块</p> <p>2、引用vue.min.js(它也一个模块)</p> <p>3、将html页面中构建vue实例的代码放在main.js中。</p> <p>main.js的代码如下</p> <p>============================</p> <p>var {add} = require('./model01.js');</p> <p>var Vue = require('./vue.min.js');</p> <p>var VM =new Vue({</p> <p>el:"#app",//表示当前vue对象接管app的div区域</p> <p>    data:{</p> <p>name:'lww', // 相当于是MVVM中的Model这个角色</p> <p>        num1:0,</p> <p>        num2:0,</p> <p>        result:0,</p> <p>        url:"https://hao.360.com/?wd=1000",</p> <p>        size:30</p> <p>    },</p> <p>    methods:{</p> <p>chang:function () {</p> <p>this.result = add(Number.parseInt(this.num1),Number.parseInt(this.num2))</p> <p>alert("计算结果 " +this.result)</p> <p>}</p> <p>}</p> <p>});</p> <p><br></p> <p>============================</p> <p>1.3.3.3 打包测试</p> <p>上边将mode01.js模块及main.js主文件编写完成,下边使用webpack对这些js文件进行打包</p> <p>1、进入程序目录,执行webpack ./main.js -o build.js   --mode=production ,</p> <p>这段指令表示将main.js打包输出为 build.js文件</p> <p>webpack --mode=production   //  生产环境</p> <p>webpack --mode=development  // 开发环境</p> <p>执行完成,观察程序目录是否出现build.js。</p> <p>2、在html中引用build.js</p> <p><script src="build.js"></script></p> <p><br></p> <h1>1.3.4 webpack-dev-server <br> </h1> <p>1、安装webpack-dev-server</p> <p>使用 webpack-dev-server需要安装webpack、 webpack-dev-server和 html-webpack-plugin三个包。</p> <p>cnpm install webpack@3.6.0 webpack-dev-server@2.9.1 html-webpack-plugin@2.30.1 --save-dev</p> <p>(--save-dev本地安装)</p> <p>安装完成,会发现程序目录出现一个package.json文件,此文件中记录了程序的依赖。</p> <p>2、配置webpack-dev-server </p> <p>在package.json中配置script</p> <p>"scripts": { </p> <p>"dev": "webpack‐dev‐server ‐‐inline ‐‐hot ‐‐open ‐‐port 5008"</p> <p>},</p> <p>--inline:自动刷新 </p> <p>--hot:热加载</p> <p>--port:指定端口</p> <p>--open:自动在默认浏览器打开</p> <p>--host:可以指定服务器的 ip,不指定则为127.0.0.1,如果对外发布则填写公网ip地址</p> <p>devDependencies:开发人员在开发过程中所需要的依赖。 </p> <p>scripts:可执行的命令</p> <p><br></p> <h4>1.3.4.2 配置webpack.confifig.js <br> </h4> <p>在webpacktest02目录下创建 webpack.confifig.js, webpack.confifig.js是webpack的配置文件。在此文件中可以配 </p> <p>置应用的入口文件、输出配置、插件等,其中要实现热加载自动刷新功能需要配置html-webpack-plugin插件。</p> <p>html-webpack-plugin的作用是根据html模板在内存生成html文件,它的工作原理是根据模板文件在内存中生成一</p> <p>个index.html文件。</p> <p><br></p> <h4> 配置 html-webpack-plugin <br> </h4> <p>在webpack.confifig.js中配置html-webpack-plugin插件</p> <p>========================</p> <p>var htmlwp = require('html‐webpack‐plugin'); </p> <p>module.exports={</p> <p>entry:'./src/main.js', //指定打包的入口文件</p> <p>output:{</p> <p>path : __dirname+'/dist', // 注意:__dirname表示webpack.config.js所在目录的绝对路径</p> <p>filename:'build.js' //输出文件</p> <p>},</p> <p>plugins:[</p> <p>new htmlwp({</p> <p>title: '首页', //生成的页面标题<head><title>首页

filename: 'index.html', //webpack‐dev‐server在内存中生成的文件名称,自动将build注入到这

个页面底部,才能实现自动刷新功能

template: 'vue_02.html' //根据index1.html这个模板来生成(这个文件请程序员自己生成)

})

]

}

==========================

1.3.4.3 启动

启动文件:

1、进入 webpacktest02目录,执行npm run dev

2、使用webstorm,右键package.json文件,选择“Show npm Scripts”

打开窗口:


双击 dev。

注意:dev就是在package.json中配置的webpack dev server命令。

发现启动成功自动打开浏览器。

修改src中的任意文件内容,自动加载并刷新浏览器。

1.3.4.4 debug调试

使用了webpack之后就不能采用传统js的调试方法在chrome中打断点。

webpack将多个源文件打包成一个文件,并且文件的内容产生了很大的变化,webpack提供devtool进行调试,

devtool是基于sourcemap的方式,在调试时会生成一个map文件,其内容记录生成文件和源文件的内容映射,即

生成文件中的哪个位置对应源文件中的哪个位置,有了sourcemap就可以在调试时看到源代码。

配置如下:

1、在webpack.confifig.js中配置:

devtool: 'eval‐source‐map',

webpack.confifig.js部分内容如下:

=============================

var htmlwp = require('html‐webpack‐plugin');

module.exports={

entry:'./src/main.js', //指定打包的入口文件

output:{

path : __dirname+'/dist', // 注意:__dirname表示webpack.config.js所在目录的绝对路径

filename:'build.js' //输出文件

},

devtool: 'eval‐source‐map',

......

==============================

2、在js中跟踪代码的位置上添加debugger

一个例子:

在add方法中添加debugger

====================

// 定义add函数

function add(x, y) {

debugger

return x + y

}

=====================

启动应用,刷新页面跟踪代码:

点击“计算” 即进入debugger代码位置,此时可以使用chrome进行调试了。

你可能感兴趣的:(02_01 Vue.js与Webpack研究)