webpack打包项目
1.Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,这个工具之后可以自动替你完成这些任务。
Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件。
1.安装好npm,这个不再复述,然后在一个目录下执行 npm init,这样就会初始化一个项目包,
里面就有了一个package.json的文件,这个文件想必大家都有所了解
2.然后安装一下webpack,既然我们想打包,就要把webpack这个工具安装好,安装方式有两种,
一个是全局安装一个是安装在项目中,在项目的package.json目录下执行的命令分别是
npm install -g webpack 和 npm install --save-dev webpack,在这里我们安装在项目里面,使用第二种安装方式
3.安装完成之后我们能看到项目目录下有一个node_module的文件夹,然后我们就可以写自己的项目了,
我们首先建立一个app和public的文件夹,在app中新建两个文件,分别是test.js和main.js,
在pulic中新建一个index.html文件,这样我们的基本项目雏形就产生了
-----如果我们想把css样式也一起打包,就npm install --save-dev style-loader css-loader,然后在webpack.config.js进行相应的配置就行了,这样是把js和css打包成一个文件,也可以把他们分开打包,这样后面再介绍吧
-
完整版: 同时包含编译器和运行时的版本。
-
编译器:主要用于将模板字符串编译成 Javascript 渲染函数。
-
运行时: 负责创建 vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。
-
UMD:UMD 版本可以通过标签直接用在浏览器中。jsDelivr CDN 的 cdn.jsdelivr.net/npm/vue 默认文件就是运行时 + 编译器的 UMD 版本 (
vue.js)。 -
CommonJS:CommonJS 版本用来配合老的打包工具比如 Browserify 或 webpack 1。这些打包工具的默认文件 (
pkg.main) 是只包含运行时的 CommonJS 版本 (vue.runtime.common.js)。 -
ES Module:从 2.6 开始 Vue 会提供两个 ES Modules (ESM) 构建文件
3.H5的离线缓存技术
1.离线缓存可以将站点的一些文件存在本地,浏览器的一种机制,将需要的文件缓存起来。
优点:-没网,可以访问到缓存的对应的站点页面,包括html,css,js,img
-资源缓存可以带来更好的用户体验,当使用自己的流量上网时,本地缓存不仅可以提高用户访问速度,而且大大节约用户的使用流量
-没网,浏览器会优先使用离线存储的文件,返回一个200头
mainfest清单是一个简单的文本文件
--HTML5的离线存储是**基于**一个新建的 **.appcache文件的缓存机制(** 不是存储技术),通过这个文件上的解析清单离线存储资源;把需要离线存储在本地的文件列在一个manifest配置文件中
4.React和vue的区别
共同点:
数据驱动视图--采用数据驱动视图方式,隐藏操作DOM
组件化
都使用Virtual DOM
不同点:
vue:渐进式框架,进行数据拦截/代理,它对侦测数据的变化更敏感、更精确.更易上手。Vuex
React:函数式编程(组件),核心思想不同,写法的差异,源码差异。redux
1.1 微任务/宏任务
异步队列中包括:微任务(micro-task) 和 宏任务(macro-task)
微任务包括: process.nextTick ,Promise ( process.nextTick 为 Node 独有)
宏任务包括: script , setTimeout ,setInterval ,setImmediate ,I/O ,UI rendering
Tips:
- 微任务优先级高于宏任务的前提是:同步代码已经执行完成。因为
script属于宏任务,程序开始后会首先执行同步脚本,也就是script。 Promise里边的代码属于同步代码,.then()中执行的代码才属于异步代码。
###HTML和HTML5的区别 文档类型的声明、结构语义区别、绘图区别、音频和视频的支持、语法的处理
1.冒泡排序的方式对数组进行由大到小的排序
1.重复的访问要排序的元素列,依次比较相邻的元素
function Bubblesort(arr){
const len=arr.length
for(let i=0;i<len;i++){
for(ley j=1;j<len-i;j++){
if(arr[j-1]>arr[j]){
[arr[j-1],arr[j]]=[arr[j],arr[j-1]]
}
}
}
return arr
}
2.数组去重
eg:es6新增数据类型set,set最大的特点就是数据不重复
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error!')
return
}
return [...new set(arr)]
}
3.有语句块:setTimeout(()=>{console.log('异步')},1000); console.log('同步'); 请将语句的执行顺序变为同步,达到打印结果输出的先后顺序为异步,同步
let p =new promise((resolve,reject)=>{
setTimeout(()=>{
console.log('异步');
resolve()},1000);
const fun=async()=>{
await p;
console.log('同步');
fun()})