Vue学习笔记
1.webpack.config.js配置
1.下载webpack
npm install webpack@3.6.0 --serve-dev
2.css文件处理 -style-loader
1.安装style-loader
npm install --serve-dev style-loader
- 注意:style-loader需要放在css-loader的前面
2.疑惑:不对吧?按照我们的逻辑,在处理css文件过程中,应该是css-loader先加载css文件,再由style-loader来进行进一步的处理,为什么会将style-loader放在前面呢?
答:这次因为webpack在读取使用的loader的过程中,是按照从右向左的顺序读取的。
3.lees文件处理 -less-loader
1.安装less-loader -->特别注意的是 版本问题 否则不兼容
npm install --save-dev less-loader@4.1.0 less@3.9.0
2.修改对应的配置文件
- 添加一个rules选项,用于处理.less文件
4.el和template区别
1.正常运行之后,我们来考虑另外一个问题:
如果我们希望将data中的数据显示在界面中,就必须是修改index.html 如果我们后面自定义了组件,也必须修改index.html来使用组件
正常运行之后,我们来考虑另外一个问题:
-
如果我们希望将data中的数据显示在界面中,就必须是修改index.html
-
如果我们后面自定义了组件,也必须修改index.html来使用组件
-
但是html模板在之后的开发中,我并不希望手动的来频繁修改,是否可以做到呢?
定义template属性:
- 在前面的Vue实例中,我们定义了el属性,用于和index.html中的#app进行绑定,让Vue实例之后可以管理它其中的内容
- 这里,我们可以将div元素中的{{message}}内容删掉,只保留一个基本的id为div的元素
- 但是如果我依然希望在其中显示{{message}}的内容,应该怎么处理呢?
- 我们可以再定义一个template属性,代码如下:
new Vue({
el:'#app',
template:'<div id="app">{{message}}</div>',
data:{
message:'coderwhy'
}
})
5.vue文件的封装处理
-
一个组件以一个js对象的形式进行组织和使用的时候是非常不方便的
-
一方面是编写template模块非常的麻烦
-
另一个方面是如果样式话,我们写在哪里比较合适呢?
-
看如下代码:
<template> <h2 class="title">{{name}}</h2> </template> <script> export default { name: 'App', data() { return { name: 'hello' }; } } </script> <style scoped> .title{ color: green; } </style>
-
但是,这个时候这个文件可以被正确的加载吗?
1.必然不可以,这种特殊的文件以及特殊的格式,必须有人帮助我们处理。
2.谁来处理呢?vue-loader以及vue-template-compiler。
-
-
安装vue-loader和vue-template-compiler
npm install vue-loader vue-template-compiler --save-dev
-
修改webpack.config.js的配置文件:
{ test:/\.vue$\, user:{'vue-loader'} }
-
6.添加版权的Plugin
- 我们先来使用一个最简单的插件,为打包的文件添加版权声明该插件名字叫BannerPlugin,属于webpack自带的插件。
module.exports={
...
plugins:[
new webpack.BannerPlugin('最终版权归于xxxx所有')
]
}
-
重新打包程序:npm run build --> 查看bundle.js文件的头部
/*!最终版权归于xxxx所有*/ /*******/(function(modules{//webpackBootstrap
7.搭建本地服务器
-
webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现我们想要的让浏览器自动刷新显示我们修改后的结果。
-
不过它是一个单独的模块,在webpack中使用之前需要先安装它
npm install --save-dev webpack-dev-server@2.9.1
-
devserver也是作为webpack中的一个选项,选项本身可以设置如下属性:
-
contentBase:为哪一个文件夹提供本地服务,默认是根文件夹,我们这里要填写./dist
-
port:端口号
-
inline:页面实时刷新
-
historyApiFallback:在SPA页面中,依赖HTML5的history模式
-
webpack.config.js文件配置修改如下:
devServer:{ contenBase:'./dist', inline:true },
-
我们可以再配置另外一个scripts:
-
–open参数表示直接打开浏览器
"dev":"webpack-dev-server --open"
-
-
8.Vuecli-脚手架的介绍和初始化项目
-
Vue CLI2初始化项目
- vue init webpack my-project
-
Vue CLI3初始化项目
- vue create my-project
报错:Command vue init requires a global addon to be installed.
解决方法:npm install -g @vue/cli-init
npm WARN deprecated vue-cli@2.9.6: This package has been deprecated in favour of @vue/cli
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circ
umstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
+ @vue/cli-init@4.5.15
added 252 packages from 206 contributors in 130.243s
报错:vue-cli · Failed to download repo vuejs-templates/webpack: connect ETIMEDOUT 203.208.39.104:44
原因:过vue-cli工具命令vue init webpack vuedemo创建vue项目的时候报错,提示连接超时,应该是下载某个package的时候,需要翻墙,导致出现连接超时。
so -->
解决办法:改为离线创建,我们需要下载github仓库中的vue-templates/webpack,然后解压到本地。下载地址为:https://github.com/vuejs-templates/webpack,下载之后,解压到本地用户目录下的.vue-templates目录下
注意:下载之后的压缩包为webpack-develop.zip,我们解压之后,需要更改目录名为webpack。用户目录下的目录为.vue-templates,注意文件夹名称前面的点(.)。
我们再进行vue init webpack vuedemo命令的时候,需要带上参数–offline表示离线初始化。
git 全局配置 以及 环境变量配置
git config --global user.name "名字"
git config --global user.email "邮箱"
环境变量:点击高级系统设置 --> 环境变量 --> 选择用户变量或系统变量中的Path,点击编辑
添加路径:
1.D:\Git\bin
2.D:\Git\mingw64\libexec\git-core
3.D:\Git\mingw64\bin
Vue 按照步骤详解
9.什么是路由
-
路由是一个网络工程的术语
-
路由就是通过互联的网络把信息从源地址传输到目的地址的活动 (路由就是URL到函数的映射)
- 路由器提供了两种机制:路由和转送
- 路由是决定数据包从来源到目的地的路径
- 转送将输入端的数据转移到合适的输出端
- 路由器提供了两种机制:路由和转送
-
路由中有一个非常重要的概念交路由表
- 路由表本质上就是一个映射表,决定了数据包的指向
-
早期的网站开发整个HTML页面是由服务器来渲染的.
服务器直接生产渲染好对应的HTML页面, 返回给客户端进行展示. -
但是, 一个网站, 这么多页面服务器如何处理呢?
- 一个页面有自己对应的网址, 也就是URL.
- URL会发送到服务器, 服务器会通过正则对该URL进行匹配, 并且最后交给一个Controller进行处理.
- Controller进行各种处理, 最终生成HTML或者数据, 返回给前端.
- 这就完成了一个IO操作.
-
上面的这种操作, 就是后端路由.
- 当我们页面中需要请求不同的路径内容时, 交给服务器来进行处理, 服务器渲染好整个页面, 并且将页面返回给客户顿.
- 这种情况下渲染好的页面, 不需要单独加载任何的js和css, 可以直接交给浏览器展示, 这样也有利于SEO的优化.
-
后端路由的缺点:
- 一种情况是整个页面的模块由后端人员来编写和维护的.
- 另一种情况是前端开发人员如果要开发页面, 需要通过PHP和Java等语言来编写页面代码.
- 而且通常情况下HTML代码和数据以及对应的逻辑会混在一起, 编写和维护都是非常糟糕的事情.
10.前后端分离
-
前后端分离阶段:
- 随着Ajax的出现, 有了前后端分离的开发模式.
- 后端只提供API来返回数据, 前端通过Ajax获取数据, 并且可以通过JavaScript将数据渲染到页面中.
- 这样做最大的优点就是前后端责任的清晰, 后端专注于数据上, 前端专注于交互和可视化上.
- 并且当移动端(iOS/Android)出现后, 后端不需要进行任何处理, 依然使用之前的一套API即可.
- 目前很多的网站依然采用这种模式开发.
-
单页面富应用阶段:
- 其实SPA最主要的特点就是在前后端分离的基础上加了一层前端路由.
- 也就是前端来维护一套路由规则.
-
前端路由的核心是什么呢?
-
改变URL,但是页面不进行整体的刷新。
-
如何实现呢?
-
11.URL的hash
-
URL的hash也就是锚点(#), 本质上是改变window.location的href属性.
-
我们可以通过直接赋值location.hash来改变href, 但是页面不发生刷新
-
history.pushState({},‘’,‘aadddds’)和history.back()相当于 入栈出栈操作
-
防止表单重复提交history.replaceState({},‘’,‘about’) 而且返回不了网页
-
history.back() 等价于 history.go(-1)
新。 -
如何实现呢?
11.URL的hash
-
URL的hash也就是锚点(#), 本质上是改变window.location的href属性.
-
我们可以通过直接赋值location.hash来改变href, 但是页面不发生刷新
-
history.pushState({},‘’,‘aadddds’)和history.back()相当于 入栈出栈操作
-
防止表单重复提交history.replaceState({},‘’,‘about’) 而且返回不了网页
-
history.back() 等价于 history.go(-1)
-
history.forward() 则等价于 history.go(1)