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文件

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

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF‐8">

<title>vue.js入门程序</title>

<script src="/js/vue/vue.min.js"></script>

</head>

<body>

<div id="app">

{{name}}

<!‐‐ 在Vue接管区域中使用Vue的系统指令呈现数据

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

</div>

</body>

<script>

// 实例化Vue对象

//vm :叫做MVVM中的 View Model

var VM = new Vue({

el:"#app",//表示当前vue对象接管app的div区域

data:{

name:'lww'// 相当于是MVVM中的Model这个角色

}

});

</script>

</html>

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

启动 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


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

<!DOCTYPE html>

<html lang="en">

    <meta charset="UTF-8">

    <title>Title

    <script src="/js/vue/vue.min.js">

<div  id="app">

    {{name}}

    <input type="text"  v-model="num1">+

<input type="text" v-model="num2">={{Number.parseInt(num1)+Number.parseInt(num2)}}

<button>计算

    // 实例化Vue对象 //vm :叫做MVVM中的 View Model

    var VM=new Vue({

el :"#app",// 表示当前vue 接管app的div区域

        data:{

name :'lww', // 相当于是MVVM中的Model这个角色

            num1 :1,

            num2 :2

        }

})

</html>

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

1、在表单控件或者组件上创建双向绑定 2、v-model仅能在如下元素中使用:

input

select

textarea

components(Vue中的组件)

2、解决插值表达式闪烁问题,使用v-text

v-text可以将一个变量的值渲染到指定的元素中,它可以解决插值表达式闪烁的问题

 3、v-on绑定一个按钮的单击事件

 4、v-bind

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

1、作用:

v‐bind可以将数据对象绑定在dom的任意属性中。

v‐bind可以给dom对象绑定一个或多个特性,例如动态绑定style和class

2、举例:

<img v‐bind:src="imageSrc">

<div v‐bind:style="{ fontSize: size + 'px' }"></div>

3、缩写形式

<img :src="imageSrc">

<div :style="{ fontSize: size + 'px' }"></div>


=====================Eg

<!DOCTYPE html>

<html lang="en">

    <meta charset="UTF-8">

    <title>Title

<div id="app">


    <span v-text="name">

    <input type="text" v-model="num1">+

<input type="text" v-model="num2">=

<span v-text="result">

    <button v-on:click="chang">计算

    <a v-bind:href="url">360

    <div :style="{ fontSize: size + 'px' }">divdiv

<script src="/js/vue/vue.min.js">

    // 实例化Vue对象 //vm :叫做MVVM中的 View Model

    var VM =new Vue({

el:"#app",// 表示当前vue 接管app的div区域

        data: {

name:'lww', // 相当于是MVVM中的Model这个角色

            num1:0,

            num2:0,

            result:0,

            url:"https://hao.360.com/?wd=1000",

            size:30

        },

        methods: {

chang:function () {

this.result = Number.parseInt(this.num1) + Number.parseInt(this.num2)

alert("计算结果 " +this.result)

}

}

})

</html>

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

1.2.4 v-if和v-for

======================eg

<!DOCTYPE html>

<html lang="en">

    <meta charset="UTF-8">

    <title>Title

    <script src="/js/vue/vue.min.js">

<div  id="app">

    {{name}}



        <li v-for="(item,index) in list" :key="index" >{{index}}-{{item}}

        <div >aaaaaaaaa

        <li v-for="(item,index) in list" :key="index"  v-if="index % 2==0">{{index}}-{{item}}

        <div >aaaaaaaaa

        <li v-for ="(value,key) in user">{{key}}-{{value}}

        <div >aaaaaaaaa

        <li v-for="(item,index) in userlist" :key="item.user.uname">{{index}}‐{{item.user.uname}}‐{{item.user.age}}

        <div >aaaaaaaaa

        <li v-for="(item,index) in userlist" :key="item.user.uname">

            <div v-if="item.user.uname=='lww'" style="background:chartreuse">

            {{index}}‐{{item.user.uname}}‐{{item.user.age}}

            <div v-else=""> {{index}}‐{{item.user.uname}}‐{{item.user.age}}

    // 实例化Vue对象 //vm :叫做MVVM中的 View Model

    var VM=new Vue({

el :"#app",// 表示当前vue 接管app的div区域

        data:{

name :'lww',    // 相当于是MVVM中的Model这个角色

            list:[1,2,3,4,5,6],

            user:{uname:'lww',age:10},

            userlist:[

{user:{uname:'lww',age:10}},

                {user:{uname:'jjj',age:11}}

]

}

})

</html>

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

1.3 webpack入门

使用vue.js开发大型应用需要使用webpack打包工具,本节研究webpack的使用方法。

1.3.1 webpack介绍

Webpack 是一个前端资源的打包工具,它可以将js、image、css等资源当成一个模块进行打包。


从图中我们可以看出,Webpack 可以将js、css、png等多种静态资源 进行打包,使用webpack有什么好处呢?

1、模块化开发

程序员在开发时可以分模块创建不同的js、 css等小文件方便开发,最后使用webpack将这些小文件打包成一个文

件,减少了http的请求次数。

webpack可以实现按需打包,为了避免出现打包文件过大可以打包成多个文件。

2、 编译typescript、ES6等高级js语法

随着前端技术的强大,开发中可以使用javascript的很多高级版本,比如:typescript、ES6等,方便开发,

webpack可以将打包文件转换成浏览器可识别的js语法。

3、CSS预编译

webpack允许在开发中使用Sass 和 Less等原生CSS的扩展技术,通过sass-loader、less-loader将Sass 和 Less的

语法编译成浏览器可识别的css语法。

webpack的缺点:

1、配置有些繁琐

2、文档不丰富

1.3.2 安装webpack

1.3.2.1 安装Node.js

webpack基于node.js运行,首先需要安装node.js。


为什么会有node.js?

传统意义上的 JavaScript 运行在浏览器上,Chrome 使用的 JavaScript 引擎是 V8,Node.js 是一个运行在服务端

的框架,它的底层就使用了 V8 引擎,这样就可以使用javascript去编写一些服务端的程序,这样也就实现了用

javaScript去开发 Apache + PHP 以及 Java Servlet所开发的服务端功能,这样做的好处就是前端和后端都采用

javascript,即开发一份js程序即可以运行在前端也可以运行的服务端,这样比一个应用使用多种语言在开发效率上

要高,不过node.js属于新兴产品,一些公司也在尝试使用node.js完成一些业务领域,node.js基于V8引擎,基于

事件驱动机制,在特定领域性能出色,比如用node.js实现消息推送、状态监控等的业务功能非常合适。

下边我们去安装Node.js:

1、下载对应你系统的Node.js版本:

https://nodejs.org/en/download/

 2、选安装目录进行安装

默认即可

安装完成检查PATH环境变量是否设置了node.js的路径。

3、测试

在命令提示符下输入命令

node ‐v

会显示当前node的版本

1.3.2.2 安装NPM

1、自动安装NPM

npm全称Node Package Manager,他是node包管理和分发的工具,使用NPM可以对应用的依赖进行管理,NPM

的功能和服务端项目构建工具maven差不多,我们通过npm 可以很方便地下载js库,打包js文件。

node.js已经集成了npm工具,在命令提示符输入 npm -v 可查看当前npm版本

2、设置包路径

包路径就是npm从远程下载的js包所存放的路径。

使用 npm config ls 查询NPM管理包路径(NPM下载的依赖包所存放的路径)


NPM默认的管理包路径在C:/用户/[用户名]/AppData/Roming/npm/node_meodules,为了方便对依赖包管理,我

们将管理包的路径设置在单独的地方,本教程将安装目录设置在node.js的目录下,创建npm_modules和

npm_cache,执行下边的命令:

本教程安装node.js在D:\soft\javaEE\nodejs下所以执行命令如下:

npm config set prefix "D:\soft\javaEE\nodejs\npm_modules"

npm config set cache "D:\soft\javaEE\nodejs\npm_cache"

此时再使用 npm config ls 查询NPM管理包路径发现路径已更改



将npm_modules  添加到环境变量 path中

3、安装cnpm

npm默认会去国外的镜像去下载js包,在开发中通常我们使用国内镜像,这里我们使用淘宝镜像

下边我们来安装cnpm:

有时我们使用npm下载资源会很慢,所以我们可以安装一个cnmp(淘宝镜像)来加快下载速度。

输入命令,进行全局安装淘宝镜像。

npm install -g cnpm --registry=https://registry.npm.taobao.org

安装后,我们可以使用以下命令来查看cnpm的版本

进入npm_modules  然后进cmd窗口


nrm ls 查看镜像已经指向taobao


使nrm use XXX切换 镜像

如果nrm没有安装则需要进行全局安装:cnpm install -g nrm

1.3.2.3 安装webpack 

1、连网安装

webpack安装分为本地安装和全局安装:

本地安装:仅将webpack安装在当前项目的node_modules目录中,仅对当前项目有效。

全局安装:将webpack安装在本机,对所有项目有效,全局安装会锁定一个webpack版本,该版本可能不适用某个

项目。全局安装需要添加 -g 参数。

1)本地安装:

只在我的项目中使用webpack,需要进行本地安装,因为项目和项目所用的webpack的版本不一样。本地安装就会

将webpack的js包下载到项目下的npm_modeuls目录下。

在门户目录下创建webpack测试目录webpacktest01:

npm install --save-dev webpack 或 cnpm install --save-dev webpack

npm install --save-dev webpack-cli (4.0以后的版本需要安装webpack-cli)

2)全局安装加-g,如下:

全局安装就将webpack的js包下载到npm的包路径下。

npm install webpack -g 或 cnpm install webpack -g

3)安装webpack指定的版本:

本教程使用webpack3.6.0,安装webpack3.6.0:

进入webpacktest测试目录,运行:cnpm install --save-dev webpack@3.6.0

全局安装:npm install webpack@3.6.0 -g或 cnpm install webpack@3.6.0 -g

https://segmentfault.com/a/1190000013699050

全局安装  npm install webpack-cli -g

1.3.3 入门程序 

通过本入门程序体会webpack打包的过程及模块化开发的思想。

1.3.3.1 需求分析

通过入门程序实现对js文件的打包,体会webpack是如何对应用进行模块化管理。

对上边1+1=2的例子使用webpack进行模块化管理


、解决方法: 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

1.3.3.2 定义模块

创建webpacktest01目录,将vue.min.js及vue_02.html拷贝到目录下。

1、定义model01.js

在webpacktest01目录下创建model01.js

将本程序使用的加法运算的js方法抽取到一个js文件,此文件就是一个模块

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

// 定义add函数

function add(x, y) {

return x + y

}

// function add2(x, y) {

// return x + y+1

// }

// 导出add方法

module.exports.add = add;

// module.exports ={add,add2};//如果有多个方法这样导出

// module.exports.add2 = add2//如果有多个方法也可以这样导出

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

2、定义main.js

在webpacktest01目录下创建main.js,main.js是本程序的js主文件,包括如下内容:

1、在此文件中会引用model01.js模块

2、引用vue.min.js(它也一个模块)

3、将html页面中构建vue实例的代码放在main.js中。

main.js的代码如下

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

var {add} = require('./model01.js');

var Vue = require('./vue.min.js');

var VM =new Vue({

el:"#app",//表示当前vue对象接管app的div区域

    data:{

name:'lww', // 相当于是MVVM中的Model这个角色

        num1:0,

        num2:0,

        result:0,

        url:"https://hao.360.com/?wd=1000",

        size:30

    },

    methods:{

chang:function () {

this.result = add(Number.parseInt(this.num1),Number.parseInt(this.num2))

alert("计算结果 " +this.result)

}

}

});


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

1.3.3.3 打包测试

上边将mode01.js模块及main.js主文件编写完成,下边使用webpack对这些js文件进行打包

1、进入程序目录,执行webpack ./main.js -o build.js   --mode=production ,

这段指令表示将main.js打包输出为 build.js文件

webpack --mode=production   //  生产环境

webpack --mode=development  // 开发环境

执行完成,观察程序目录是否出现build.js。

2、在html中引用build.js

<script src="build.js"></script>


1.3.4 webpack-dev-server

1、安装webpack-dev-server

使用 webpack-dev-server需要安装webpack、 webpack-dev-server和 html-webpack-plugin三个包。

cnpm install webpack@3.6.0 webpack-dev-server@2.9.1 html-webpack-plugin@2.30.1 --save-dev

(--save-dev本地安装)

安装完成,会发现程序目录出现一个package.json文件,此文件中记录了程序的依赖。

2、配置webpack-dev-server

在package.json中配置script

"scripts": {

"dev": "webpack‐dev‐server ‐‐inline ‐‐hot ‐‐open ‐‐port 5008"

},

--inline:自动刷新

--hot:热加载

--port:指定端口

--open:自动在默认浏览器打开

--host:可以指定服务器的 ip,不指定则为127.0.0.1,如果对外发布则填写公网ip地址

devDependencies:开发人员在开发过程中所需要的依赖。

scripts:可执行的命令


1.3.4.2 配置webpack.confifig.js

在webpacktest02目录下创建 webpack.confifig.js, webpack.confifig.js是webpack的配置文件。在此文件中可以配 

置应用的入口文件、输出配置、插件等,其中要实现热加载自动刷新功能需要配置html-webpack-plugin插件。

html-webpack-plugin的作用是根据html模板在内存生成html文件,它的工作原理是根据模板文件在内存中生成一

个index.html文件。


 配置 html-webpack-plugin

在webpack.confifig.js中配置html-webpack-plugin插件

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

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

module.exports={

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

output:{

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

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

},

plugins:[

new htmlwp({

title: '首页', //生成的页面标题<head><title>首页</title></head>

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进行调试了。

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

推荐阅读更多精彩内容