2018年8月

HTML(英文Hyper Text Markup Language的缩写)中文译为“超文本标签语言”。是用来描述网页的一种语言。

所谓超文本,因为它可以加入图片、声音、动画、多媒体等内容,不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接。

注意: 体会 文本 标签 语言 几个词语

  • HTML 指的是超文本标记语言 (Hyper Text Markup Language)
  • HTML 不是一种编程语言,而是一种标记语言 (markup language)
  • 标记语言是一套标记标签 (markup tag)

总结: HTML 作用就是用标记标签来描述网页,把网页内容在浏览器中展示出来。

用文字来描述网页标签

Html的骨架

<HTML>
    <head>             
        <title></title>    
    </head>    
    <body>    
    </body>
</HTML>

HTML标签的分类

在HTML页面中,带有“< >”符号的元素被称为HTML标签,如上面提到的 <HTML>、<head>、<body>都是HTML骨架结构标签。所谓标签就是放在“< >” 标签符中表示某个功能的编码命令,也称为HTML标签或 HTML元素

1.双标签

<标签名> 内容 </标签名>

该语法中“<标签名>”表示该标签的作用开始,一般称为“开始标签(start tag)”,“</标签名>” 表示该标签的作用结束,一般称为“结束标签(end tag)”。和开始标签相比,结束标签只是在前面加了一个关闭符“/”。

比如 <body>我是文字  </body>

2.单标签

<标签名 />

单标签也称空标签,是指用一个标签符号即可完整地描述某个功能的标签。

比如  <br />

HTML标签关系

标签的相互关系就分为两种:

  1. 嵌套关系

     <head>  <title> </title>  </head>
  2. 并列关系

    <head></head>
    <body></body>

    倡议: 如果两个标签之间的关系是嵌套关系,子元素最好缩进一个tab键的身位。如果是并列关系,最好上下对齐。

## 文档类型<!DOCTYPE>

<!DOCTYPE> 标签位于文档的最前面,用于向浏览器说明当前文档使用哪种 HTML 或 XHTML 标准规范,必需在开头处使用<!DOCTYPE>标签为所有的XHTML文档指定XHTML版本和类型,只有这样浏览器才能按指定的文档类型进行解析。

注意: 一些老网站可能用的还是老版本的文档类型比如 XHTML之类的,但是我们学的是HTML5,而且HTML5的文档类型兼容很好(向下兼容的原则),所以大家放心的使用HTML5的文档类型就好了。

字符集

<meta charset="UTF-8" />
  • utf-8是目前最常用的字符集编码方式,常用的字符集编码方式还有gbk和gb2312。
  • gb2312 简单中文 包括6763个汉字
  • BIG5 繁体中文 港澳台等用
  • GBK包含全部中文字符 是GB2312的扩展,加入对繁体字的支持,兼容GB2312
  • UTF-8则包含全世界所有国家需要用到的字符

记住一点,以后我们统统使用UTF-8 字符集, 这样就避免出现字符集不统一而引起乱码的情况了。

HTML标签的语义化

白话: 所谓标签语义化,就是指标签的含义。

为什么要有语义化标签

  1. 方便代码的阅读和维护
  2. 同时让浏览器或是网络爬虫可以很好地解析,从而更好分析其中的内容
  3. 使用语义化标签会具有更好地搜索引擎优化

核心:合适的地方给一个最为合理的标签。

语义是否良好: 当我们去掉CSS之后,网页结构依然组织有序,并且有良好的可读性。

白话,一眼看去,就知道那个是重点,结构是什么,知道每块的内容是干啥的。

遵循的原则:先确定语义的HTML ,再选合适的CSS。

HTML常用标签

首先 HTML和CSS是两种完全不同的语言,我们学的是结构,就只写HTML标签,认识标签就可以了。 不会再给结构标签指定样式了。

HTML标签有很多,这里我们学习最为常用的,后面有些较少用的,我们可以查下手册就可以了。

排版标签

排版标签主要和css搭配使用,显示网页结构的标签,是网页布局最常用的标签。

标题标签 (熟记)

单词缩写: head 头部. 标题 title 文档标题

为了使网页更具有语义化,我们经常会在页面中用到标题标签,HTML提供了6个等级的标题,即

<h1>、<h2>、<h3>、<h4>、<h5>和<h6>

标题标签语义: 作为标题使用,并且依据重要性递减,一个页面最好只出现一个<h1>有助于SEO优化。 h1 标签因为重要,尽量少用,不要动不动就向你扔了一个h1。 一般h1 都是给logo使用,或者页面中最重要标题信息。

其基本语法格式如下:

<hn>   标题文本   </hn>

段落标签( 熟记)

单词缩写: paragraph 段落 [ˈpærəgræf] 无须记这个单词

在网页中要把文字有条理地显示出来,离不开段落标签,就如同我们平常写文章一样,整个网页也可以分为若干个段落,而段落的标签就是

<p>  文本内容  </p>

是HTML文档中最常见的标签,默认情况下,文本在一个段落中会根据浏览器窗口的大小自动换行。

水平线标签(认识)

单词缩写: horizontal 横线 [ˌhɔrəˈzɑntl] 同上

在网页中常常看到一些水平线将段落与段落之间隔开,使得文档结构清晰,层次分明。这些水平线可以通过插入图片实现,也可以简单地通过标签来完成,


就是创建横跨网页水平线的标签。其基本语法格式如下:

<hr />是单标签

在网页中显示默认样式的水平线。

换行标签(熟记)

单词缩写: break 打断 ,换行

在HTML中,一个段落中的文字会从左到右依次排列,直到浏览器窗口的右端,然后自动换行。如果希望某段文本强制换行显示,就需要使用换行标签

<br/>

这时如果还像在word中直接敲回车键换行就不起作用了。

文本格式化标签(熟记)

在网页中,有时需要为文字设置粗体、斜体或下划线效果,这时就需要用到HTML中的文本格式化标签,使文字以特殊的方式显示。

标签显示效果
<b></b>和<strong></strong>加粗(推荐使用strong)
<i></i>和<em></em> 斜体(推荐使用em)
<s></s>和<del></del>删除线(推荐使用del)
<u></u>和<ins></ins> 下划线(推荐使用ins)

b i s u 只有使用 没有 强调的意思 strong em del ins 语义更强烈.

标签属性

使用HTML制作网页时,如果想让HTML标签提供更多的信息,可以使用HTML标签的属性加以设置。其基本语法格式如下:

<标签名 属性1="属性值1" 属性2="属性值2" …> 内容 </标签名>

在上面的语法中,

1.标签可以拥有多个属性,必须写在开始标签中,位于标签名后面。

2.属性之间不分先后顺序,标签名与属性、属性与属性之间均以空格分开。

3.任何标签的属性都有默认值,省略该属性则取默认值。

采取 键值对 的格式 key="value" 的格式

比如:

<hr width="400" />

属性 是 宽度

值 是 400

提倡: 尽量不使用 样式属性。

图像标签img (重点)

单词缩写: image 图像

HTML网页中任何元素的实现都要依靠HTML标签,要想在网页中显示图像就需要使用图像标签,接下来将详细介绍图像标签以及和他相关的属性。其基本语法格式如下:
该语法中s r c属性用于指定图像文件的路径和文件名,他是img标签的必需属性。

<img src="图像URL" />
属性属性值描述
srcURL图像的路径
alt文本图像不能现实的时候的替换的文字
title文本鼠标悬停的时候显示的内容
width像素(XHTML不支持%页面的百分比)设置图像的宽度
height像素(XHTML不支持%页面的百分比)设置图像的高度
border数字设置图像的宽度

链接标签(重点)

单词缩写: anchor 的缩写 [ˈæŋkə(r)] 。基本解释 锚, 铁锚 的

在HTML中创建超链接非常简单,只需用标签环绕需要被链接的对象即可,其基本语法格式如下:

<a href="跳转目标" target="目标窗口的弹出方式">文本或图像</a>

href:用于指定链接目标的url地址,当为标签应用href属性时,它就具有了超链接的功能。 Hypertext Reference的缩写。意思是超文本引用

target:用于指定链接页面的打开方式,其取值有_self和_blank两种,其中_self为默认值,_blank为在新窗口中打开方式。

注意:

1.外部链接 需要添加 http:// www.baidu.com

2.内部链接 直接链接内部页面名称即可 比如 < a href="index.html"> 首页

3.如果当时没有确定链接目标时,通常将链接标签的href属性值定义为“#”(即href="#"),表示该链接暂时为一个空链接。

4.不仅可以创建文本超链接,在网页中各种网页元素,如图像、表格、音频、视频等都可以添加超链接。

锚点定位 (难点)

通过创建锚点链接,用户能够快速定位到目标内容。
创建锚点链接分为两步:

1.使用“a href=”#id名>“链接文本"</a>创建链接文本(被点击的)
  <a href="#two">   

2.使用相应的id名标注跳转目标的位置。
  <h3 id="two">第2集</h3> 

base 标签 基本的

base 可以设置整体链接的打开状态

base 写到 之间

把所有的连接 都默认添加 target="_blank"

<base target="blank" />

特殊字符标签 (理解)

注释标签

在HTML中还有一种特殊的标签——注释标签。如果需要在HTML文档中添加一些便于阅读和理解但又不需要显示在页面中的注释文字,就需要使用注释标签。其基本语法格式如下:

<!-- 注释语句 -->  

注释内容不会显示在浏览器窗口中,但是作为HTML文档内容的一部分,也会被下载到用户的计算机上,查看源代码时就可以看到。

路径(重点、难点)

实际工作中,通常新建一个文件夹专门用于存放图像文件,这时再插入图像,就需要采用“路径”的方式来指定图像文件的位置。

根目录 当前目录

路径可以分为: 相对路径和绝对路径

相对路径

以引用文件之网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对路径。

  1. 图像文件和HTML文件位于同一文件夹:只需输入图像文件的名称即可,如<img src="logo.gif" />。
  2. 图像文件位于HTML文件的下一级文件夹:输入文件夹名和文件名,之间用“/”隔开,如<img src="img/img01/logo.gif" />。
  3. 图像文件位于HTML文件的上一级文件夹:在文件名之前加入“../” ,如果是上两级,则需要使用 “../ ../”,以此类推,如<img src="../logo.gif" />。

绝对路径

绝对路径以Web站点根目录为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的

“D:\web\img\logo.gif”,或完整的网络地址,例如“http://www.itcast.cn/images/logo.gif”。

列表标签

无序列表 ul (重点)

无序列表的各个列表项之间没有顺序级别之分,是并列的。其基本语法格式如下:

<ul>
  <li>列表项1</li>
  <li>列表项2</li>
  <li>列表项3</li>
  ......
</ul>

注意:

 1. <ul></ul>中只能嵌套<li></li>,直接在<ul></ul>标签中输入其他标签或者文字的做法是不被允许的。
 2. <li>与</li>之间相当于一个容器,可以容纳所有元素。
 3. 无序列表会带有自己样式属性,放下那个样式,一会让CSS来!

有序列表 ol (了解)

有序列表即为有排列顺序的列表,其各个列表项按照一定的顺序排列定义,有序列表的基本语法格式如下

<ol>
  <li>列表项1</li>
  <li>列表项2</li>
  <li>列表项3</li>
  ......
</ol>

所有特性基本与ul 一致。

但是实际工作中, 较少用 ol

自定义列表(理解)

定义列表常用于对术语或名词进行解释和描述,定义列表的列表项前没有任何项目符号。其基本语法如下:

<dl>
  <dt>名词1</dt>
  <dd>名词1解释1</dd>
  <dd>名词1解释2</dd>
  ...
  <dt>名词2</dt>
  <dd>名词2解释1</dd>
  <dd>名词2解释2</dd>
  ...
</dl>

表格 table(会使用)

创建表格

在HTML网页中,要想创建表格,就需要使用表格相关的标签。创建表格的基本语法格式如下:

<table>
  <tr>
    <td>单元格内的文字</td>
    ...
  </tr>
  ...
</table>

在上面的语法中包含三对HTML标签,分别为 <table></table>、<tr></tr>、<td></td>,他们是创建表格的基本标签,缺一不可,下面对他们进行具体地解释

1.table用于定义一个表格。

2.tr 用于定义表格中的一行,必须嵌套在 table标签中,在 table中包含几对 tr,就有几行表格。

3.td /td:用于定义表格中的单元格,必须嵌套在标签中,一对 中包含几对,就表示该行中有多少列(或多少个单元格)。

注意:

中只能嵌套

标签,他就像一个容器,可以容纳所有的元素

表格属性

属性名含义常见的属性值
border设置表格的边框像素值
cellspacing设置单元格与单元格边框之间的空白距离像素值(默认是2像素)
cellspadding设置单元格内容与单元格边框之间的空白间距像素值(默认是1像素)
width设置表格的宽度像素值
height设置表格的高度像素值
align设置表格在网页中的水平对齐方式left、center、right

表头标签

表头一般位于表格的第日发出一行或第一列,其文本加粗居中,如下图所示,即为设置了表头的表格。设置表头非常简单,只需用表头标签<th></th>替代相应的单元格标签&lt;td&gt;</td&gt;即可。

表格结构(了解)

 在使用表格进行布局时,可以将表格划分为头部、主体和页脚(页脚因为有兼容性问题,我们不在赘述),具体 如下所示::用于定义表格的头部。必须位于

标签中,一般包含网页的logo和导航等头部信息。:用于定义表格的主体。位于
标签中,一般包含网页中除头部和底部之外的其他内容。

表格标题

表格的标题: caption

定义和用法

caption 元素定义表格标题。

<table>
   <caption>我是表格标题</caption>
</table>

caption 标签必须紧随 table 标签之后。您只能对每个表格定义一个标题。通常这个标题会被居中于表格之上。

合并单元格(难点)

跨行合并:rowspan 跨列合并:colspan

合并单元格的思想:

 将多个内容合并的时候,就会有多余的东西,把它删除。    例如 把 3个 td 合并成一个, 那就多余了2个,需要删除。

 公式:  删除的个数  =  合并的个数  - 1   

合并的顺序 先上 先左

总结表格

  1. 表格提供了HTML 中定义表格式数据的方法。
  2. 表格中由行中的单元格组成。
  3. 表格中没有列元素,列的个数取决于行的单元格个数。
  4. 表格不要纠结于外观,那是CSS 的作用。

    表格的学习要求: 能手写表格结构,并且能合并单元格。

表单标签(掌握)

在我们网页中, 我们也需要跟用户进行交互,收集用户资料,此时也需要表单。

在HTML中,一个完整的表单通常由表单控件(也称为表单元素)、提示信息和表单域3个部分构成。

表单控件:

   包含了具体的表单功能项,如单行文本输入框、密码输入框、复选框、提交按钮、重置按钮等。

提示信息:

    一个表单中通常还需要包含一些说明性的文字,提示用户进行填写和操作。

表单域:

  他相当于一个容器,用来容纳所有的表单控件和提示信息,可以通过他定义处理表单数据所用程序的url地址,以及数据提交到服务器的方法。如果不定义表单域,表单中的数据就无法传送到后台服务器。

input 控件(重点)

在上面的语法中,<input />标签为单标签,type属性为其最基本的属性,其取值有多种,用于指定不同的控件类型。除了type属性之外,<input />标签还可以定义很多其他的属性,其常用属性如下表所示。

属性属性值描述
typetext单行文本输入框
password密码输入框
radio单选按钮
checkbox复选框
button普通按钮
submit提交按钮
reset重置按钮
image图形形式的提交按钮
file文件域
name由用户自定义控件的名称
value由用户自定义input控件中的默认文本值
size正整数input控件在页面中的显示宽度
checkedchecked定义选择控件被选中的项
maxlength正整数控件允许输入的最多字符数

label标签(理解)

label 标签为 input 元素定义标注(标签)。

作用: 用于绑定一个表单元素, 当点击label标签的时候, 被绑定的表单元素就会获得输入焦点

如何绑定元素呢?

for 属性规定 label 与哪个表单元素绑定。

<label for="male">Male</label>
<input type="radio" name="sex" id="male" value="male">

textarea控件(文本域)

如果需要输入大量的信息,就需要用到<textarea></textarea>标签。通过textarea控件可以轻松地创建多行文本输入框,其基本语法格式如下:

<textarea cols="每行中的字符数" rows="显示的行数">
  文本内容
</textarea>

下拉菜单

使用select控件定义下拉菜单的基本语法格式如下

<select>
  <option>选项1</option>
  <option>选项2</option>
  <option>选项3</option>
  ...
</select>

注意:

  1. <select></select>中至少应包含一对<option></option>。
  2. 在option 中定义selected =" selected "时,当前项即为默认选中项。

表单域

在HTML中,form标签被用于定义表单域,即创建一个表单,以实现用户信息的收集和传递,form中的所有内容都会被提交给服务器。创建表单的基本语法格式如下:

<form action="url地址" method="提交方式" name="表单名称">
  各种表单控件
</form>

常用属性:

  1. Action
    在表单收集到信息后,需要将信息传递给服务器进行处理,action属性用于指定接收并处理表单数据的服务器程序的url地址。
  2. method
    用于设置表单数据的提交方式,其取值为get或post。
  3. name
    用于指定表单的名称,以区分同一个页面中的多个表单。

注意: 每个表单都应该有自己表单域。

微信小程序的生命周期就是一个小程序从创建到销毁的整个过程。
在app.js的文件中,定义了一些生命周期的方法,是针对全局来使用的。

 App({

  /**
   * 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
   */
  onLaunch: function () {
    
  },
  /**
   * 当小程序启动,或从后台进入前台显示,会触发 onShow
   */
  onShow: function (options) {
    
  },

  /**
   * 当小程序从前台进入后台,会触发 onHide
   */
  onHide: function () {
    
  },

  /**
   * 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
   */
  onError: function (msg) {
    
  }
})

onLaunch 生命周期函数--监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)。
onShow 生命周期函数--监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow。
onHide 生命周期函数--监听小程序隐藏 当小程序从前台进入后台,会触发 onHide。
onError 错误监听函数--当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息。

在pages的页面的js文件中,仅对当前页面有效:

Page({
 
  onLoad: function () {
    console.log('onLoad')
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  }
})

onLoad 生命周期函数--监听页面加载。
onReady 生命周期函数--监听页面初次渲染完成。
onShow 生命周期函数--监听页面显示。
onHide 生命周期函数--监听页面隐藏。
onUnload 生命周期函数--监听页面卸载。

打开小程序后会依次执行onLoadonReadyonShow方法,
前后台切换会分别执行onHideonShow方法,
当小程序页面销毁时会执行 onUnload方法。

小编在登录远程桌面的时候一直显示由于CredSSP加密Oracle修正 1.png
的警告,连接不上。最终通过以下办法解决了

  1. 首先点击windows+R键
  2. 输入gpedit.msc,点击确定。
    2.png
  3. 然后依次选择:计算机配置>管理模板>系统>凭据分配>加密Oracle修正
    3.png
    4.png
    5.png
    双击打开
  4. 更改设置
    6.png
    点击应用完成即可,如果不生效就重启电脑。

小编也是刚接触微信小程序,对于一些常见的视图建议大家参考手册就好啦,小编在这里整理了一下常见的细节。
大家都知道wxml文件都是现实内容的,对于传值过来的数据微信小程序采用的是双大括号来进行数据的绑定的,绑定的数据来源于js文件中的data数据。
wxml

<text>{{ test }}</text>

js

 data:{
    text : "这里是内容",
    btnText : "这是按钮的内容",
    show : false,
    news : ['aaa','bbb','ccc','ddd']
    
 }

按钮的点击事件
xml

 <button type="primary" bindtap="btnClick"> {{btnText}} </button>
  btnClick : function (){

     console.log("按钮被点击了")

     var isShow = this.data.show;
     console.log("isShow:"+isShow)


     var newsdata = this.data.news;
     newsdata.shift()

     this.setData({text:"这是一个新的内容...",show:!isShow,news:newsdata})

 }

渲染标签
if....else....

 <view  wx:if="{{show}}" >{{text}} 1 </view>
 <view  wx:else >{{text}} 2 </view>

for

<view wx:for="{{news}}" wx:for-item="itemx" wx:for-index="ix">

{{ix}} - {{itemx}}

</view>

模板导入
include

 <include src="../templates/header" />

import

 <import src="../templates/footer" />
 <template is="footer2" data="{{text:'导入设置的内容...'}}" />
<template name="footer1">
这是底部内容1  - {{text}}
</template>
<template name="footer2">
这是底部内容2  - {{text}}
</template>

include在导入的时候直接把内容加入到了文件中,import在导入的时候需要使用is来进行选择,而且可以传递数据。

在webpack中配置.vue组件页面的解析

  1. 运行npm i vue -S将vue安装为运行依赖;
  2. 运行npm i vue-loader vue-template-compiler -D将解析转换vue的包安装为开发依赖;
  3. 运行npm i style-loader css-loader -D将解析转换CSS的包安装为开发依赖,因为.vue文件中会写CSS样式;
  4. 在webpack.config.js中,添加如下module规则

    module: {
    
    rules: [
    
      { test: /\.css$/, use: ['style-loader', 'css-loader'] },
    
      { test: /\.vue$/, use: 'vue-loader' }
    
    ]
    
     }
  5. 创建App.js组件页面

    <template>
    
      <!-- 注意:在 .vue 的组件中,template 中必须有且只有唯一的根元素进行包裹,一般都用 div 当作唯一的根元素 -->
    
      <div>
    
        <h1>这是APP组件 - {{msg}}</h1>
    
        <h3>我是h3</h3>
    
      </div>
    
    </template>
    
     <script>
    
    // 注意:在 .vue 的组件中,通过 script 标签来定义组件的行为,需要使用 ES6 中提供的 export default 方式,导出一个vue实例对象
    
    export default {
    
      data() {
    
        return {
    
          msg: 'OK'
    
        }
    
      }
    
    }
    
    </script>
    
    <style scoped>
    
    h1 {
    
      color: red;
    
    }
    
    </style>

6.创建main.js入口文件

 // 导入 Vue 组件

   import Vue from 'vue'

   // 导入 App组件

   import App from './components/App.vue'

   // 创建一个 Vue 实例,使用 render 函数,渲染指定的组件

   var vm = new Vue({

     el: '#app',

     render: c => c(App)

   });

在使用webpack构建的Vue项目中使用模板对象

在webpack.config.js中添加resolve属性:

resolve: {
   alias: {
     'vue$': 'vue/dist/vue.esm.js'
   }
 }

在vue组件页面中,集成vue-router路由模块

  1. 导入路由模块:

    import VueRouter from 'vue-router'
  2. 安装路由模块:

    Vue.use(VueRouter);
  3. 导入需要展示的组件:

    import login from './components/account/login.vue'
    
    import register from './components/account/register.vue'
  4. 创建路由对象:

    var router = new VueRouter({
    
      routes: [
    
        { path: '/', redirect: '/login' },
    
        { path: '/login', component: login },
    
        { path: '/register', component: register }
    
      ]
    
    });
  5. 将路由对象,挂载到 Vue 实例上:

    var vm = new Vue({
    
      el: '#app',
    
      // render: c => { return c(App) }
    
      render(c) {
    
        return c(App);
    
      },
    
      router // 将路由对象,挂载到 Vue 实例上
    
    });
  6. 改造App.vue组件,在 template 中,添加router-link和router-view:

        <router-link to="/login">登录</router-link>
    
        <router-link to="/register">注册</router-link>
    
    
    
        <router-view></router-view>
    

组件中的css作用域问题scoped

scoped仅在当前组件,或者子组件中有效

<style scoped>
div {
 color: red;
}
</style> 

抽离路由为单独的模块

import VueRouter from 'vue-router'

// 导入 Account 组件
import account from './main/Account.vue'
import goodslist from './main/GoodsList.vue'

// 导入Account的两个子组件
import login from './subcom/login.vue'
import register from './subcom/register.vue'

// 3. 创建路由对象
var router = new VueRouter({
 routes: [
   // account  goodslist
   {
     path: '/account',
     component: account,
     children: [
       { path: 'login', component: login },
       { path: 'register', component: register }
     ]
   },
   { path: '/goodslist', component: goodslist }
 ]
})

// 把路由对象暴露出去
export default router

使用webpack打包css文件

  1. 安装loader

    npm i style-loader css-loader -D
  2. 修改webpack.config.js这个配置文件:

    module: { // 用来配置第三方loader模块的
        rules: [ // 文件的匹配规则
            { test: /\.css$/, use: ['style-loader', 'css-loader'] }//处理css文件的规则
        ]
    }
  3. 注意:use表示使用哪些模块来处理test所匹配到的文件;use中相关loader模块的调用顺序是从后向前调用的.

使用webpack打包less文件

  1. 安装loader

    npm i less-loader less -D
  2. 修改webpack.config.js这个配置文件

    { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }

使用webpack打包sass文件

注意:有时候使用npm i node-sass -D装不上,这时候,就必须使用 cnpm i node-sass -D

  1. 安装loader

    npm i sass-loader node-sass -D
  2. 修改webpack.config.js这个配置文件

    { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }

使用webpack处理css中的路径

  1. 安装loader

    npm i url-loader file-loader -D
  2. 修改webpack.config.js这个配置文件

    { test: /\.(png|jpg|gif)$/, use: 'url-loader' },
    { test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }
  3. 可以通过limit指定进行base64编码的图片大小;只有小于指定字节(byte)的图片才会进行base64编码,并且设置图片是否被重命名。

     { test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=7631&name=[hash:8]-[name].[ext]' }

使用babel处理高级JS语法

  1. 运行npm i babel-core babel-loader babel-plugin-transform-runtime -D安装babel的相关loader包.
  2. 运行npm i babel-preset-es2015 babel-preset-stage-0 -D安装babel转换的语法.
  3. 在webpack.config.js中添加相关loader模块,其中需要注意的是,一定要把node_modules文件夹添加到排除项:

    { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
  4. 在项目根目录中添加.babelrc文件,并修改这个配置文件如下:

    {
    "presets":["es2015", "stage-0"],
    "plugins":["transform-runtime"]
    }
  5. 注意:语法插件babel-preset-es2015可以更新为babel-preset-env,它包含了所有的ES相关的语法。

注意:如果要通过路径的形式,去引入 node_modules 中相关的文件,可以直接省略 路径前面的 node_modules 这一层目录,直接写 包的名称,然后后面跟上具体的文件路径,不写 node_modules 这一层目录 ,默认 就会去 node_modules 中查找。

webpack 能够处理 JS 文件的互相依赖关系;webpack 能够处理JS的兼容问题,把高级的、浏览器不是别的语法,转为低级的,浏览器能正常识别的语法

webpack的安装

  1. 运行npm i webpack -g全局安装webpack,这样就能在全局使用webpack的命令。
  2. 在项目根目录中运行npm i webpack -D安装到项目依赖中。

使用webpack进行打包

方式一:命令打包

webpack [要打包的文件的路径以及文件名] -o [打包后的文件路径以及文件名] 这是webpack4.1之后的打包命令。
webpack [要打包的文件的路径以及文件名] [打包后的文件路径以及文件名] 这是webpack4.1之前的打包命令。
方式二:配置文件

  • 在项目根目录中创建webpack.config.js
  • 由于运行webpack命令的时候,webpack需要指定入口文件和输出文件的路径,所以,我们需要在webpack.config.js中配置这两个路径:

     // 导入处理路径的模块
    var path = require('path');
    
    // 导出一个配置对象,将来webpack在启动的时候,会默认来查找webpack.config.js,并读取这个文件中导出的配置对象,来进行打包处理
    module.exports = {
        entry: path.resolve(__dirname, 'src/js/main.js'), // 项目入口文件
        output: { // 配置输出选项
            path: path.resolve(__dirname, 'dist'), // 配置输出的路径
            filename: 'bundle.js' // 配置输出的文件名
        }
    }

此时只需要执行webpack命令就可以打包了。
此时webpack做了以下几步:

  1. 首先,webpack 发现,我们并没有通过命令的形式,给它指定入口和出口;
  2. webpack 就会去 项目的 根目录中,查找一个叫做 webpack.config.js 的配置文件;
  3. 当找到配置文件后,webpack 会去解析执行这个 配置文件,当解析执行完配置文件后,就得到了 配置文件中,导出的配置对象;
  4. 当 webpack 拿到 配置对象后,就拿到了 配置对象中,指定的 入口 和 出口,然后进行打包构建。

webpack的实时打包构建

  1. 由于每次重新修改代码之后,都需要手动运行webpack打包的命令,比较麻烦,所以使用webpack-dev-server来实现代码实时打包编译,当修改代码之后,会自动进行打包构建。
  2. 运行cnpm i webpack-dev-server -D安装到开发依赖
  3. 安装完成之后,在命令行直接运行webpack-dev-server来进行打包,发现报错,此时需要借助于package.json文件中的指令,来进行运行webpack-dev-server命令,在scripts节点下新增"dev": "webpack-dev-server"指令,发现可以进行实时打包,但是dist目录下并没有生成bundle.js文件,这是因为webpack-dev-server将打包好的文件放在了内存中。如果在运行此命令的时候显示webpack-dev-server不是内部或外部命令就对webpack-dev-server进行全局安装npm i webpack-dev-server -g
  • 把bundle.js放在内存中的好处是:由于需要实时打包编译,所以放在内存中速度会非常快
  • 这个时候访问webpack-dev-server可以使用--contentBase src指令来修改dev指令,指定启动的根目录,端口号,热更新等:

      "dev": "webpack-dev-server --open --port 3000 --contentBase src --hot"

使用 webpack-dev-server 这个工具,来实现自动打包编译的功能的总结:

  1. 运行 npm i webpack-dev-server -D 把这个工具安装到项目的本地开发依赖;
  2. 安装完毕后,这个工具的用法,和webpack 命令的用法,完全一样;
  3. 由于,我们是在项目中,本地安装的 webpack-dev-server , 所以,无法把它当作 脚本命令,在powershell 终端中直接运行;(只有那些 安装到 全局 -g 的工具,才能在 终端中正常执行)
  4. 注意: webpack-dev-server 这个工具,如果想要正常运行,要求,在本地项目中,必须安装 webpack
  5. webpack-dev-server 帮我们打包生成的 bundle.js 文件,并没有存放到 实际的 物理磁盘上;而是,直接托管到了 电脑的内存中,所以,我们在 项目根目录中,根本找不到 这个打包好的 bundle.js;
  6. 我们可以认为, webpack-dev-server 把打包好的 文件,以一种虚拟的形式,托管到了 咱们项目的 根目录中,虽然我们看不到它,但是,可以认为, 和 dist src node_modules 平级,有一个看不见的文件,叫做 bundle.js.

使用html-webpack-plugin插件配置启动页面

由于使用--contentBase指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.htmlscript标签的src属性,所以推荐大家使用html-webpack-plugin插件配置启动页面.

  1. 运行npm i html-webpack-plugin -D安装到开发依赖。
  2. 修改webpack.config.js配置文件如下:

     // 导入处理路径的模块
    var path = require('path');
    // 导入自动生成HTMl文件的插件
    var htmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
        entry: path.resolve(__dirname, 'src/js/main.js'), // 项目入口文件
        output: { // 配置输出选项
            path: path.resolve(__dirname, 'dist'), // 配置输出的路径
            filename: 'bundle.js' // 配置输出的文件名
        },
        plugins:[ // 添加plugins节点配置插件
            new htmlWebpackPlugin({
                template:path.resolve(__dirname, 'src/index.html'),//模板路径
                filename:'index.html'//自动生成的HTML文件的名称
            })
        ]
    }
  3. 修改package.json中script节点中的dev指令如下:

    "dev": "webpack-dev-server"
  4. 将index.html中script标签注释掉,因为html-webpack-plugin插件会自动把bundle.js注入到index.html页面中。

实现自动打开浏览器、热更新和配置浏览器的默认端口号

方式一:
修改package.jsonscript节点如下,其中--open表示自动打开浏览器--port 3000表示打开的端口号为3000--hot表示启用浏览器热更新

"dev": "webpack-dev-server --hot --port 3000 --open"

方式二:

  1. 修改webpack.config.js文件,新增devServer节点如下:

    devServer:{
       hot:true,
       open:true,
       port:4321
    }
  2. 在头部引入webpack模块

    var webpack = require('webpack');
  3. 在plugins节点下新增: new webpack.HotModuleReplacementPlugin()

    plugins: [ // 配置插件的节点
    new webpack.HotModuleReplacementPlugin(), // new 一个热更新的 模块对象, 这是 启用热更新的第 3 步
    new htmlWebpackPlugin({ // 创建一个 在内存中 生成 HTML  页面的插件
     template: path.join(__dirname, './src/index.html'), // 指定 模板页面,将来会根据指定的页面路径,去生成内存中的 页面
     filename: 'index.html' // 指定生成的页面的名称
    })
     ]

nrm的作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址;,我们依旧使用的事npm的命令,只是镜像地址变了

什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原因,经常访问不到,这时候,我们可以在国内,创建一个和官网完全一样的NPM服务器,只不过,数据都是从人家那里拿过来的,除此之外,使用方式完全一样;

安装:

  1. 运行npm i nrm -g全局安装nrm包。

使用:

  1. 使用nrm ls查看当前所有可用的镜像源地址以及当前所使用的镜像源地址;
  2. 使用nrm use npmnrm use taobao等切换不同的镜像源地址;

注意: nrm 只是单纯的提供了几个常用的 下载包的 URL地址,并能够让我们在 这几个 地址之间,很方便的进行切换,但是,我们每次装包的时候,使用的 装包工具,都是 npm