Vue04

前言:此据狂神哔哩哔哩视频所写,转载请自觉附上链接,若有不妥之处,欢迎指正。

九、Vue入门小结

核心: 数据驱动,组件化

优点: 借鉴了AngulaJS的模块化开发 和 React 的虚拟化Dom,虚拟Dom操作放到内存中执行;

常用属性:

  • v-if
  • v-else-if
  • v-else
  • v-for
  • v-on 绑定事件,简写@
  • v-model 数据双向绑定
  • v-bind v-bind 该给组件绑定参数,简写:

组件化:

  • 组合组件slot 插槽
  • 组件内部绑定事件需要使用到吧this.$emit(“事件名”,参数)
  • 计算属性的特色,缓存计算数据

遵循SoC关注度分离原则,Vue是纯粹的视图框架,并不包含,比如Ajax之类的通信功能,为了解决通信问题,我们需要使用Axios框架做异步通信。

说明:

Vue的开发都是基于NodeJs,实际开发采用vue-cli脚手架开发,vue-router路由,vuex做状态管理;Vue UI,界面我们一般使用ElementUI(饿了么出品),或者ICE(阿里巴巴出品)来快度搭建前端项目~

官网:点击跳转中文官网;

点击跳转官网

Vue:第一个vue-cli项目

什么是vue-cli?

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是个隐藏目录,不勾选则看不到】

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPVxIw1N-1594524192086)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709082555383.png)]
    在这里插入图片描述

    安装vue-cliao

    cnpm install vue-cli -g
    #测试是否安装成功
    #查看可以基于那些模板创建vue应用程序,通常我们选择webpack
    vue list
    

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MtHeWZj4-1594524192091)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709095809703.png)]

在这里插入图片描述

【注意webpack】:vue是基于ES6的语法,但实际很多开发都是基于ES5的语法,有了webpack可以降级使用,解决了兼容性问题。

为什么使用vue-cli?

在实际开发中,会用的是vue-cli。

怎么使用Vue-cli?

第一个vue-cli应用程序

1、创建一个Vue项目,我们随便建立一个空的文件夹在电脑上:

D:\JavaProject\VScodeProjects

2、创建一个基于webpack模板的vue应用程序

# 这里的myvue是项目名称,可以根据自己的需求起名字
vue init webpack myvue

3、步骤:首先cmd进入DOC系统打开你所要创建项目的目录位置并且输入vue init webpack myvue

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1XKYEZy-1594524192093)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709102148271.png)]

接着按下enter键,会出现项目描述(Project description),接着继续按enter建,出现作者(Author),写上即可,enter下一步,会出现Vue build (Use arrow keys),选择第一个。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mfnqac0T-1594524192094)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709102745843.png)]

最后一路选择no即可,当按下No,I will handle that myself时enter就完成了项目的创建。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-POphdmEJ-1594524192094)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709103318051.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PEpgAAwE-1594524192095)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709103356913.png)]

此时,你会发现myvue项目,打开其属性,会发现有23个文件,6个文件夹。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rUt8m0B8-1594524192095)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709103649496.png)]

4、说明

  • Project name:项目名称,默认 enter 即可
  • Project description:项目描述,默认 enter 即可
  • Author:项目作者,默认 enter 即可
  • Install vue-router?:是否安装vue-router,选择no之后意味着后期需要手动添加
  • Use ESLint to lint your code?:是否使用 ESLint做代码检查,选择no之后意味着后期需要手动添加
  • Set up unit tests:单元测试相关,选择no之后意味着后期需要手动添加
  • Setup e2e tests with Nightwatch?:单元测试相关,选择no之后意味着后期需要手动添加
  • Should we run npm install for you after the project has been created? (recommended):创建完后直接初始化,选择no,我们手动执行;运行结果!

5、初始化并运行

cd myvue  //进入myvue
npm install //安装所有依赖环境
npm run dev  //启动当前项目(先要打包才能使用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-66ZPBVAI-1594524192096)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709110031309.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Q3LYPJQ-1594524192097)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709110328098.png)]

在这里插入图片描述

Your application is running here: http://localhost:8080

打开浏览器,输入http://localhost:8080,会发现一个创建的Vue项目,这个就是nodejs服务器,页面如下:

在这里插入图片描述
若要停止,则在Win+R 输入cmd进入DOS系统中,按Ctrl + C,输入Y回车即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqz1piai-1594524192098)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709111647634.png)]

再次刷新浏览器,发现访问不了,页面如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWHaVBW7-1594524192099)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200709111825328.png)]

Vue开发项目的了解

前面是在DOS系统安装Vue,初始化并运行,而在用vscode运行vue项目时还需要一个插件然后Ctrl + Shift + Y打开控制台终端,输入启动命令npm run dev 会出现以下界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sltwifdv-1594524192099)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200711143130241.png)]

在最后链接 http://localhost:8080停留,会出现跟随链接提示,Ctrl + 鼠标左单击打开便可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28VvnCGi-1594524192100)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200711143355855.png)]

简单了解一下这个项目的结构,主要由build、config、node_modules、src和static组成,首先了解一下进入Vue的模块SRC

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozBWBvlH-1594524192101)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200711150102739.png)]

接着是BUILD模块,着重注意三个环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zx1tSyJf-1594524192101)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200711152033367.png)]

然后是CONFIG模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2jYK92O-1594524192102)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200711152731800.png)]

还有是node_modules模块,这个是程序运行是的一些组件,不同的这些是依赖,不是JAR。static模块,静态资源的存放地,用来存放些图片这些。index.html这个是程序的主入口,这里是不能改变的。package.json是打包需用的版本,打包需要降级版本这些则需要这个修改。

十、Webpack学习

10.1、什么是Webpack?

本质上,Webpack是一个现代JavaScript应用程序的静态模块打包器(module bunder)。当webpack处理程序时,它会递归地构建一个依赖地关系图(dependncy graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或者多个bundle。

Webpack是当下最热门的前端资源模化管理和打包工具,它可以将许多松散耦合的模块按照依赖呵呵规则打包成符合生产环境部署的其前端资源吗。还可以将需要加载的模块进行代码分离,等到实际需要时在异步加载。通过loader转化,任何形式的资源都可以当作,比如CommonsJS、AMD、ES6、CSS、JSON|、ConffeeScript、LESS等。

10.2、为什么需要Webpack?

伴随着移动互联网的大潮,当今越来越多的网站已经从网页模式进化到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对象中,不同的模块的调用都是一个作用域。这种原始的加载方式暴露了一些显而易见的弊端:

  • 全局作用域下容易造成变量冲突
  • 文件只能按照 < script >的书写顺序进行加载
  • 开发人员必须主观解决模块和代码库的依赖关系
  • 在大型项目中各种资源难以管理,长期积累的问题导致代码库混乱不堪

CommonsJS

服务器端的NodeJS遵循CommonsJS规范,该规核心思想是允许模块通过require方法来同步加载所需依赖的其它模块,然后通过exports或module.exports来到出需要的接口。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZlZb1r8Y-1594524192102)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200711164710506.png)]

require("module");
require("../module,js");
export.doStuff = function(){};
module.exports = someValue;

优点:

  • 服务器端模块便于重用
  • NPM中已经有超过45亿可以使用的模块包
  • 简单易用

缺点:

  • 同步的模块加载方式不适合在浏览器环境中,同步 意味着阻塞加载,浏览器资源是异步加载的
  • 不能非阻塞地并行加载多个模块

实现:

  • 服务端地NodeJS
  • Browserify,浏览器端的CommonsJS实现,可以使用NPM的模块,但编译打包的文件体积较大
  • modules-webmake,类似Browserify,但不如Browserify灵活
  • wreq,Browserify的前身

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){});

优点:

  • 适合在浏览器环境中异步加载模块
  • 可以并行加载多个模块

缺点:

  • 提高了开发成本,代码的阅读和书写比较困难,模块定义的方式的语义不畅
  • 不符合通用的模块化思维方式,是一种妥协的实现

实现:

  • RequireJS
  • curl

CMD

Commons Moeule Definition规范和AMD很相似,尽量保持简单,并与CommonsJS和NodeJS的Modules规范保持了很大的兼容性。

define(function(require,exports,module){
    var $ = require("jquery");
    var Spinning = require("./spining");
    exports.doSomething = ...;
    module.expotrs = ...;

});

优点:

  • 依赖就近,延迟执行
  • 可以很容易在NodeJSA中运行

缺点:

  • 依赖SPM打包,模块的加载逻辑偏重

实现:

  • Sea.js
  • coolie

ES6模块

EcmaScript6标准增加了JavaScript语言层面的模块体系定义。ES6模块的设计思想,是尽量静态化,是编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonsJS和AMD模块,都只能在运行时确定这些东西。

import = "jquery";
export function doStuff(){}
module "localModule"{}

优点:

  • 容易进行静态分析
  • 面向未来对EcmaScript标准

缺点:

  • 原生浏览器端还没有实现标准
  • 全新的命令,新版的NodeJS才支持

实现:

  • Babel

大家期望的模块系统

可以兼容很多模块风格,尽量可以利用已有的代码,不仅仅只是JavaScript模块化,还有CSS、图片、字体等资源也需要模块化。

10.3、怎么使用Webpack?

安装Webpack

Webpack是一款 模块加速器兼容打包工具,它能把各种资源,如JS、JSX、ES6、SASS、LESS图片等都作为模块来处理和使用。

安装:

npm install webpack -g
npm install webpack-cli -g

测试安装成功:

webpack -v 
webpack-cli -v

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MM4mXghr-1594524192103)(C:%5CUsers%5C%E6%B8%B8%E7%BF%94%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200711182956987.png)]

说明:全局安装(-g)和局部按装(–save-dev)的区别

全局按装的特点:
1、在js实例代码中,默认下node.js会在NODE_PATH和目前js所在项目下的node_modules文件夹下去寻找模块,因此,如果只是全局安装,不能直接通过require()的方式去引用模块,需要手动解决包路径的配置问题,当然你也可以复制全局安装的node_modules文件夹到项目下,还有办法可以选择将环境变量的NODE_PATH设置为C:\Program Files\nodejs。
2、对于包的更新不好管理,可能你需要为每个包重新命名,如gulp@3.8.1、gulp@3.9.1...,为了区别不同项目使用指定的包,保证模块之间的相互依赖(这块下面会介绍),区别每个项目正常运行。
因此,不推荐只全局安装。

局部安装(本地按装)的特点(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配置文件

  • entry:入口文件,指定WebPack用哪个为项目的入口
  • output:输出,指定WebPack把处理完成的文件放置到指定路径
  • module:模块,用于处理各种类型的文件
  • plugins:插件,如:热更新、代码重用等
  • resolve:设置路径指向
  • watch:监听,用于设置文件改动后直接打包
module.exports = {
    entry:"",
    output:{
        path:"",
        filename:""
    },
    module:{
        loaders:[
            {test:/\.js$/,loader:""}
        ]
    },
    plugins:{},
    resolve:{},
    watch: true
}

直接运行webpack命令打包

使用webpack

  1. 创建项目

  2. 创建一个名为modules的目录,用于放置JS模块资源文件

  3. 在modules下创建模块文件,如hello.js,用于编写JS模块相关代码

    //暴露一个方法:sayHi
    exports.sayHi = function(){
        document.write("<div>Hello WebPack</div>");
    }
    
  4. 在modules下创建一个名为main.js的入口文件,用于打包时设置entry属性

    //require导入一个模块,就可以调用这个模块中的方法了
    var hello = require("./hello");
    hello.sayHi();
    
  5. 在项目目录下创建webpack.config.js配置文件,使用webpack命令打包

    module.exports = {
        entry: "./modules/main.js",
        output: {
            filename: "./js/bundle.js"
        }
    }
    
  6. 在项目·目录下创建HTML页面,如index.html,导入webpack打包后的JS文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta type="charset">
        <title>游翔学Java<title>
    </head>
    <body>
        <script src="./js/bundle.js"></script>
    </body>
    </html>
    
  7. 在VScode控制台中直接执行webpack;如果失败的话,就使用管理员权限运行即可!

  8. 运行HTML 看效果

说明

# 参数 --watch  用于监听变化
webpack --watch

图片效果(运行没有成功)

在这里插入图片描述
打包时会出现无法打包的问题,这是因为没有用管理员模式,解决措施:

1、打开VScode的快捷方式,然后打开属性,在兼容性里使用以管理员方式运行

2、可以在DOS系统(管理员身份打开),用命令运行

在这里插入图片描述
3、运行完毕后会在项目目录下多一一个dist目录,里面的bundel.js就是一个打包压缩后的一个js文件

在这里插入图片描述
4、打开浏览器,发现运行不出来,查找错误发现是电脑的问题。

在这里插入图片描述
这样的错误告一段落了,后面会寻找方法解决。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值