git中submodule子模块的添加、使用和删除

背景

项目中经常使用别人维护的模块,在git中使用子模块的功能能够大大提高开发效率。

使用子模块后,不必负责子模块的维护,只需要在必要的时候同步更新子模块即可。

本文主要讲解子模块相关的基础命令,详细使用请参考man page。

阅读更多
使用 npm-check-updates 快速升级前端项目 package.json 依赖版本

通过使用 npm outdatednpm update 命令,可以对前端项目中的第三方依赖版本进行分析与升级。但他们可用的参数较少,有些过于简单。

阅读更多
使用sendBeacon进行前端数据上报

前言

最近接到一个需求,需要统计页面的相关数据,并进行上报,本文就介绍一下数据上报的一些方法。

上报数据的时机

  • 页面加载时

此时进行数据上报,只需要在页面 load 时上报即可。

window.addEventListener('load', reportData, false);
  • 页面卸载或页面刷新时

此时进行数据上报,只需要在页面 beforeunload 时上报即可。

window.addEventListener('beforeunload', reportData, false);
  • SPA 路由切换时
    • 如果是 vue-routerreact-router@3 及以下版本,则可以在 hooks 里进行上报操作。
    • 如果是 react-router@4 则需要在 Routes 根组件的生命周期内进行上报。
  • 页面多个 tab 切换时

如果是这种情况,可以在 visibilitychange 时通过读取 document.visibilityStatedocument.hidden 区分页面 tab 的激活状态,判断是否需要进行上报。

document.addEventListener("visibilitychange", function() {
if(document.visibilityState === 'visible') {
reportData();
}
if(document.visibilityState === 'hidden') {
reportData2();
}
// your code ...
});
阅读更多
利用iframe实现ajax跨域通信的解决方案

  在漫长的前端开发旅途上,无可避免的会接触到ajax,而且一般情况下都是用在同一域下的ajax请求;但是如果请求是发生在不同的域下,请求就无法执行,并且会抛出异常提示不允许跨域请求,目前我没有找到明确的资料说明这是为什么,我觉得应该是出于安全性的考虑吧。纵然如此,要实现跨域访问的话,方法还是有的,而且不只一种,在这里介绍其中一种解决方案:如何利用iframe完成ajax的跨域请求。

阅读更多
异步Promise及Async/Await最完整入门攻略

全文转载自 https://www.tangyida.top/detail/152 作者:唐益达

除修正原文中的错别字和部分代码(文中有说明)其余未修改

此文只介绍Async/Await与Promise基础知识与实际用到注意的问题,将通过很多代码实例进行说明。

为什么有Async/Await?

我们都知道已经有了Promise的解决方案了,为什么还要ES7提出新的Async/Await标准呢?

答案其实也显而易见:Promise虽然跳出了异步嵌套的怪圈,用链式表达更加清晰,但是我们也发现如果有大量的异步请求的时候,流程复杂的情况下,会发现充满了屏幕的then,看起来非常吃力,而ES7的Async/Await的出现就是为了解决这种复杂的情况。

首先,我们必须了解Promise

阅读更多
javascript中逻辑运算(||,&&,!)

JavaScript中的布尔类型

  JavaScript中逻辑运算有3种:且&&,或||,非!,不过在说这三种逻辑运算之前,先解释一下JavaScript中的布尔类型。

  JavaScript和其它高级语言一样,布尔类型有true和false两种,但是与其它语言不同的地方,也是JavaScript很奇妙的一个地方是,JavaScript中的任何类型都可以转化成布尔类型,转化规则如下:

  • 可以转换为false的:false0nullundefined,空字符串""''NaN

  • 可以转换为true的:上面可转换为false以外的所有数据都转换为true

阅读更多
scss-&父选择器标识符

  在使用选择器嵌套的时候有一种情况需要特别注意,先看一段scss代码实例:

.text a {
color: blue;
:hover { color: red }
}

  也许写此段代码目的是为了将其编译成如下css代码:

.text a {
color: blue;
}
.text a:hover {
color: red;
}
阅读更多
git全局设置、查看、取消代理

git全局设置、查看、取消代理

下面两种二选一就可以了

设置socks5代理

git config --global http.proxy 'socks5://127.0.0.1:10808' 
git config --global https.proxy 'socks5://127.0.0.1:10808'

设置http代理

git config --global http.proxy 'http://127.0.0.1:10809' 
git config --global https.proxy 'http://127.0.0.1:10809'
阅读更多
npm设置、取消、查看代理与切换源

npm设置、取消、查看代理

设置http代理

npm config set proxy=http://127.0.0.1:10809
阅读更多
sass-loader的版本过高导致的编译错误
Module build failed: TypeError: this.getResolve is not a function
at Object.loader (D:\study\mpvue实战\mpvue-dushu\node_modules\sass-loader\dist\index.js:52:26)

@ ./node_modules/extract-text-webpack-plugin/dist/loader.js?{"omit":1,"remove":true}!./node_modules/vue-style-loader!./node_modules/css-loader?{"minimize":false,"sourceMap":false}!./node_modules/mpvue-loader/lib/style-compiler?{"vue":true,"id":"data-v-6ce044b7","scoped":true,"hasInlineConfig":false}!./node_modules/px2rpx-loader?{"baseDpr":1,"rpxUnit":0.5}!./node_modules/postcss-loader/lib?{"sourceMap":true}!./node_modules/sass-loader/dist/cjs.js?{"sourceMap":false}!./node_modules/mpvue-loader/lib/selector.js?type=styles&index=0!./src/pages/index/index.vue 4:14-555
@ ./src/pages/index/index.vue
@ ./src/pages/index/main.js
阅读更多