前言:此据狂神哔哩哔哩视频所写,转载请自觉附上链接,若有不妥之处,欢迎指正。
核心: 数据驱动,组件化
优点: 借鉴了AngulaJS的模块化开发 和 React 的虚拟化Dom,虚拟Dom操作放到内存中执行;
常用属性:
组件化:
遵循SoC关注度分离原则,Vue是纯粹的视图框架,并不包含,比如Ajax之类的通信功能,为了解决通信问题,我们需要使用Axios框架做异步通信。
说明:
Vue的开发都是基于NodeJs,实际开发采用vue-cli脚手架开发,vue-router路由,vuex做状态管理;Vue UI,界面我们一般使用ElementUI(饿了么出品),或者ICE(阿里巴巴出品)来快度搭建前端项目~
官网:点击跳转中文官网;
点击跳转官网
vue-cli官网提供一个脚手架,用于快速生成一个vue的项目模板;预先定义好的目录结构及基础代码,就好比咱们再创建Maven项目时可以选择一个骨架项目,这个骨架项目就是脚手架,我们开发更加地快速;
主要功能:
需要的环境:
Node.js:安装就无脑安装下一步就好,安装在自己的环境目录下。
Git; 镜像:
确认nodejs安装成功:
Win + R 输入cmd(command 命令) 打开DOS(Disk Operating System)系统 然后输入 node -v,查看是否能够正确打印出版本号即可!
Win + R 输入cmd(command 命令) 打开DOS(Disk Operating System)系统 然后输入npm -v,查看是否能够正确打印出版本号即可!
这个npm,就是一个软件包管理工具,就和Linux下的apt软件安装差不多!
安装Node.js淘宝镜像加速器(cnpm),这样子的话,下载会很多~
# -g 就是全局安装
npm install cnpm -gsud
# 或者使用一下语法解决 npm 速度慢的问题
npm install --registry=https://registry.npm.taobao.arg
安装过程 可能有点慢~,请耐心等待!虽然安装了cnpm,但是尽量少使用!
安装位置:C:\Users\游翔\AppData\Roaming\npm 【注意:在我的电脑上,打开查看,勾选隐藏的项目,AppData是个隐藏目录,不勾选则看不到】
安装vue-cliao
cnpm install vue-cli -g
#测试是否安装成功
#查看可以基于那些模板创建vue应用程序,通常我们选择webpack
vue list
【注意webpack】:vue是基于ES6的语法,但实际很多开发都是基于ES5的语法,有了webpack可以降级使用,解决了兼容性问题。
在实际开发中,会用的是vue-cli。
第一个vue-cli应用程序
1、创建一个Vue项目,我们随便建立一个空的文件夹在电脑上:
D:\JavaProject\VScodeProjects
2、创建一个基于webpack模板的vue应用程序
# 这里的myvue是项目名称,可以根据自己的需求起名字
vue init webpack myvue
3、步骤:首先cmd进入DOC系统打开你所要创建项目的目录位置并且输入vue init webpack myvue
接着按下enter键,会出现项目描述(Project description),接着继续按enter建,出现作者(Author),写上即可,enter下一步,会出现Vue build (Use arrow keys),选择第一个。
最后一路选择no即可,当按下No,I will handle that myself时enter就完成了项目的创建。
此时,你会发现myvue项目,打开其属性,会发现有23个文件,6个文件夹。
4、说明
npm install
for you after the project has been created? (recommended):创建完后直接初始化,选择no,我们手动执行;运行结果!5、初始化并运行
cd myvue //进入myvue
npm install //安装所有依赖环境
npm run dev //启动当前项目(先要打包才能使用)
Your application is running here: http://localhost:8080
打开浏览器,输入http://localhost:8080,会发现一个创建的Vue项目,这个就是nodejs服务器,页面如下:
若要停止,则在Win+R 输入cmd进入DOS系统中,按Ctrl + C,输入Y回车即可
再次刷新浏览器,发现访问不了,页面如下:
前面是在DOS系统安装Vue,初始化并运行,而在用vscode运行vue项目时还需要一个插件然后Ctrl + Shift + Y打开控制台终端,输入启动命令npm run dev 会出现以下界面:
在最后链接 http://localhost:8080停留,会出现跟随链接提示,Ctrl + 鼠标左单击打开便可。
简单了解一下这个项目的结构,主要由build、config、node_modules、src和static组成,首先了解一下进入Vue的模块SRC
接着是BUILD模块,着重注意三个环境
然后是CONFIG模块
还有是node_modules模块,这个是程序运行是的一些组件,不同的这些是依赖,不是JAR。static模块,静态资源的存放地,用来存放些图片这些。index.html这个是程序的主入口,这里是不能改变的。package.json是打包需用的版本,打包需要降级版本这些则需要这个修改。
本质上,Webpack是一个现代JavaScript应用程序的静态模块打包器(module bunder)。当webpack处理程序时,它会递归地构建一个依赖地关系图(dependncy graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或者多个bundle。
Webpack是当下最热门的前端资源模化管理和打包工具,它可以将许多松散耦合的模块按照依赖呵呵规则打包成符合生产环境部署的其前端资源吗。还可以将需要加载的模块进行代码分离,等到实际需要时在异步加载。通过loader转化,任何形式的资源都可以当作,比如CommonsJS、AMD、ES6、CSS、JSON|、ConffeeScript、LESS等。
伴随着移动互联网的大潮,当今越来越多的网站已经从网页模式进化到WebApp模式。他们运行在现代浏览器里,使用HTML5、CSS3、ES6等新的技术来开发丰富的功能,网页已经不仅仅是完成浏览器的基本需求;WebApp通常是一个SPA(A(单页面应用),每一个视图通过异步的方式加载,这导致页面初始化和使用过中加载越来越多的JS代码,这给前端的开发流程和资源组织带来了巨大的挑战。
前端开发和其他开发工具的主要区别,首先是前端基于多语言、多层次的编码和资源组织工作,其次是前端产品的交付是基于浏览器的,这些资源是通过增量加载的方式运行到浏览端,如何在开发环境中组织好这些碎片化的资源并且保证他们在浏览器端快速、优雅的加载和更新,就需要一个模板化系统吗,这个理想中的模块化系统是前端工程师多年来一直探索的难题。
模块化的演进
Scritpt标签
<script src="module1.js">script>
<script src="module2.js">script>
<script src="module3.js">script>
这是最原始的JavaScript文件加载方式,如果把每一个文件看啊可能是一个模块,那么他们的接口通常暴露在全局作用域下,也就是定义在window对象中,不同的模块的调用都是一个作用域。这种原始的加载方式暴露了一些显而易见的弊端:
CommonsJS
服务器端的NodeJS遵循CommonsJS规范,该规核心思想是允许模块通过require方法来同步加载所需依赖的其它模块,然后通过exports或module.exports来到出需要的接口。
require("module");
require("../module,js");
export.doStuff = function(){};
module.exports = someValue;
优点:
缺点:
实现:
AMD
Asynchronous Module Definition 规范其实主要接口define(id?,dependencies?,factory);它要在生命模块的时候指定所有的依赖dependencies,并且还要当作形参传到factory中,对于依赖的模块提前执行。
define("module",["dep1","dep2"],funciton(d1,d2){
return someExportedValue;
});
require(["module","../file.js"],function(module,file){});
优点:
缺点:
实现:
CMD
Commons Moeule Definition规范和AMD很相似,尽量保持简单,并与CommonsJS和NodeJS的Modules规范保持了很大的兼容性。
define(function(require,exports,module){
var $ = require("jquery");
var Spinning = require("./spining");
exports.doSomething = ...;
module.expotrs = ...;
});
优点:
缺点:
实现:
ES6模块
EcmaScript6标准增加了JavaScript语言层面的模块体系定义。ES6模块的设计思想,是尽量静态化,是编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonsJS和AMD模块,都只能在运行时确定这些东西。
import = "jquery";
export function doStuff(){}
module "localModule"{}
优点:
缺点:
实现:
大家期望的模块系统
可以兼容很多模块风格,尽量可以利用已有的代码,不仅仅只是JavaScript模块化,还有CSS、图片、字体等资源也需要模块化。
安装Webpack
Webpack是一款 模块加速器兼容打包工具,它能把各种资源,如JS、JSX、ES6、SASS、LESS图片等都作为模块来处理和使用。
安装:
npm install webpack -g
npm install webpack-cli -g
测试安装成功:
webpack -v
webpack-cli -v
说明:全局安装(-g)和局部按装(–save-dev)的区别
全局按装的特点:
1、在js实例代码中,默认下node.js会在NODE_PATH和目前js所在项目下的node_modules文件夹下去寻找模块,因此,如果只是全局安装,不能直接通过require()的方式去引用模块,需要手动解决包路径的配置问题,当然你也可以复制全局安装的node_modules文件夹到项目下,还有办法可以选择将环境变量的NODE_PATH设置为C:\Program Files\nodejs。
2、对于包的更新不好管理,可能你需要为每个包重新命名,如[email protected]、[email protected]...,为了区别不同项目使用指定的包,保证模块之间的相互依赖(这块下面会介绍),区别每个项目正常运行。
因此,不推荐只全局安装。
局部安装(本地按装)的特点(npm install webpack 或 npm install webpack --save-dev等,参数--save-dev的含义是代表把你的安装包信息写入package.json文件的devDependencies字段中,包安装在指定项目的node_modules文件夹下):
1、最早的node.js/npm实际上是全局的,包括现在还兼容NODE_PATH,但是不能支持全局多版本,于是nodejs团队改成本地安装的方法可能就是为了保证不同版本包之间的相互依赖。其中依赖包的指定版本号不可轻易去修改,因为不同版本包对应依赖包的版本的功能有所差别,如果修改指定的版本来运行wpdemo,就可能会编译出错等bug。每一次的更新可能带来不一样的功能,在多人合作、发布模块到npmjs社区、上传到github给其他人使用时,保留模块的版本信息可用于下载指定的版本号显得特别重要。本地安装可以让每个项目拥有独立的包,不受全局包的影响,方便项目的移动、复制、打包等,保证不同版本包之间的相互依赖,这些优点是全局安装难以做到的。缺点是每次新项目都要本地安装所依赖的包,安装包时间相对较长,一来是包太大导致下载慢;二是浪费了硬盘空间。
配置
创建webpack.config.js配置文件
module.exports = {
entry:"",
output:{
path:"",
filename:""
},
module:{
loaders:[
{test:/\.js$/,loader:""}
]
},
plugins:{},
resolve:{},
watch: true
}
直接运行webpack命令打包
使用webpack
创建项目
创建一个名为modules的目录,用于放置JS模块资源文件
在modules下创建模块文件,如hello.js,用于编写JS模块相关代码
//暴露一个方法:sayHi
exports.sayHi = function(){
document.write("Hello WebPack");
}
在modules下创建一个名为main.js的入口文件,用于打包时设置entry属性
//require导入一个模块,就可以调用这个模块中的方法了
var hello = require("./hello");
hello.sayHi();
在项目目录下创建webpack.config.js配置文件,使用webpack命令打包
module.exports = {
entry: "./modules/main.js",
output: {
filename: "./js/bundle.js"
}
}
在项目·目录下创建HTML页面,如index.html,导入webpack打包后的JS文件
"en">
"charset">
游翔学Java
在VScode控制台中直接执行webpack;如果失败的话,就使用管理员权限运行即可!
运行HTML 看效果
说明
# 参数 --watch 用于监听变化
webpack --watch
图片效果(运行没有成功)
打包时会出现无法打包的问题,这是因为没有用管理员模式,解决措施:
1、打开VScode的快捷方式,然后打开属性,在兼容性里使用以管理员方式运行
2、可以在DOS系统(管理员身份打开),用命令运行