<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Z_hao_nan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Z_hao_nan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Z_hao_nan]]></copyright><item><title><![CDATA[vscode中使用全局eslint配置]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/105074834</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/105074834</guid><author>Z_hao_nan</author><pubDate>Tue, 24 Mar 2020 16:26:37 +0800</pubDate><description><![CDATA[如果仅仅是在本地进行学习开发，写demo，并且需要使用到eslint时，如果每个项目都安装相关配置会显得比较臃肿，我们可以使用全局的eslint以及相关的配置进行开发，省去了每次安装的麻烦

如果是项目研发，还是推荐安装到devDependencies,便于统一版本和他人使用

全局安装eslint
这里推荐安装eslint@5.16.0,具体可查看这个issue
npm i eslint@5.1...]]></description><category></category></item><item><title><![CDATA[百度ai通用文字识别，出现image format error的问题]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/103841236</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/103841236</guid><author>Z_hao_nan</author><pubDate>Sun, 05 Jan 2020 11:59:33 +0800</pubDate><description><![CDATA[escape() 常用于对js字符串进行编码
encodeURI() 常用于对URI跳转进行编码
encodeURIComponent() 常用于对参数传递时进行编码（有可能特殊字符，/,=等造成URI的间断问题）

解决办法
在使用百度ai进行通用文字识别时，发送image=&lt;base64编码&gt;这种格式时，请求api可能会返回image format error的问题，很有可能是编...]]></description><category></category></item><item><title><![CDATA[关于react中的context的理解]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/102405621</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/102405621</guid><author>Z_hao_nan</author><pubDate>Tue, 08 Oct 2019 19:17:00 +0800</pubDate><description><![CDATA[本例只是做说明性，具体代码要运行起来，还需要加入些其他元素

主要解决的问题
在应用中可能会有很多组件会去使用到的组件，并且当使用父子传递这一机制的时候，会显得过于臃肿繁琐，所以要使用上下文的方式来进行传递。
1.创建一个context
// theme-context.js

import React from 'react'

export const ThemeContext = Reac...]]></description><category></category></item><item><title><![CDATA[taro中集成redux-saga]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/99617741</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/99617741</guid><author>Z_hao_nan</author><pubDate>Wed, 14 Aug 2019 22:51:37 +0800</pubDate><description><![CDATA[taro中redux处理方案是采用redux-thunk,这里采用redux-saga解决异步问题，引入目前最新redux-saga@1.0.5

引入方式一
可以直接下载种子项目，已经引入了saga，并做好了相关配置，可在此基础上再次开发
taro-redux-saga-seed
// 下载种子项目
git clone https://github.com/Z-HNAN/taro-redux-...]]></description><category></category></item><item><title><![CDATA[微信小程序内，生成自定义二维码]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/98384816</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/98384816</guid><author>Z_hao_nan</author><pubDate>Sat, 03 Aug 2019 22:15:00 +0800</pubDate><description><![CDATA[最近在开发中，需要生成自定义的二维码，于是做了一个包出来，分享给大家一起使用。适用于微信小程序的二维码生成器，基于Canvas生成，支持中文的输入。可在原生小程序，mpvue，taro中使用。（文末有一个使用示例）
github地址(wxmp-qrcode)[https://github.com/Z-HNAN/wxmp-qrcode]
安装
npm install wxmp-qrcode

使用
...]]></description><category></category></item><item><title><![CDATA[async与await的理解]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/94995335</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/94995335</guid><author>Z_hao_nan</author><pubDate>Sun, 07 Jul 2019 15:33:13 +0800</pubDate><description><![CDATA[具体的执行情况V8与浏览器环境可能会略有差异，这里主要做一些原理说明，具体的执行顺序可能需要视实际情况来定。

async
async是将一个方法等待，但是其并不是暂停到那边，而是将其抛出主线程，进入就绪队列等待，而整个async函数的返回值也是一个Promise对象，具体区分以下情况
async function fn1 () {
  // ....
  return 'foo'
}
// -...]]></description><category></category></item><item><title><![CDATA[promise中链式调用then的问题]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/91449210</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/91449210</guid><author>Z_hao_nan</author><pubDate>Tue, 11 Jun 2019 17:11:15 +0800</pubDate><description><![CDATA[promise是一个很好的解决异步调用的方法，其链式调用也是一个很好的方式，这里探究一下其调用过程

主要问题
Promise.resolve()
.then(res =&gt; {
  return new Promise()  
})

Promise.resolve()
.then(res =&gt; {
  new Promise()  
})

// 上下两种Promise的方式中， ...]]></description><category></category></item><item><title><![CDATA[云函数中生成excel并且上传到云存储中]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/90815785</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/90815785</guid><author>Z_hao_nan</author><pubDate>Wed, 05 Jun 2019 00:29:18 +0800</pubDate><description><![CDATA[云环境1.0.51

小程序的云开发功能为我们带来了很大的方便，于是就打算研究一下如何在云函数中拉取数据，之后生成excel到云存储中，过程中踩了些坑，这里分享给大家，希望能有所帮助。
首先了解一个node生成excel的库excel-export
虽然已经许久未更新了，但是目前还没有什么太大的问题，所以在他的基础上进行开发,并且上手也比较容易
主要用法

引入

let nodeExcel =...]]></description><category></category></item><item><title><![CDATA[关于创建jQuery以及jQuery.fn.init.prototype = jQuery.fn的作用]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/90717129</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/90717129</guid><author>Z_hao_nan</author><pubDate>Fri, 31 May 2019 15:30:06 +0800</pubDate><description><![CDATA[本文以jQuery 2.0.3分析为例

关于构造函数的两个点

在JS中创建对象必须要使用new，否则就如同构建了一个普通对象，this表示未来创建的实例， 并返回this

function Student (school) {
  this.school = school
}

new Student('hdu') // 创建了对象 {school: 'hdu'}
Student('hdu...]]></description><category></category></item><item><title><![CDATA[解读webpack,简单实现mypack]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/90581501</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/90581501</guid><author>Z_hao_nan</author><pubDate>Sun, 26 May 2019 22:02:53 +0800</pubDate><description><![CDATA[虽然使用webpack有一阵日子了，但是对其内部的相关打包过程，还不是很了解，今天翻阅了相关资料后，借鉴写了一个webpack简化版本，仅是其核心的部分，mypack
了解一下requireJS的大致运行过程

这里需要node环境（用到了文件读写相关，webpack也是在node上运行的）

// a.js

let fs = require('fs')

function myRequire ...]]></description><category></category></item><item><title><![CDATA[使用nginx部署前端项目]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/89577995</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/89577995</guid><author>Z_hao_nan</author><pubDate>Fri, 26 Apr 2019 22:38:08 +0800</pubDate><description><![CDATA[当前环境 centos7

安装相关依赖

gcc 安装

安装 nginx 需要先将官网下载的源码进行编译，编译依赖 gcc 环境，如果没有 gcc 环境，则需要安装：
yum install gcc-c++

PCRE pcre-devel 安装

PCRE(Perl Compatible Regular Expressions) 是一个Perl库，包括 perl 兼容的正则表达式库。ngi...]]></description><category></category></item><item><title><![CDATA[关于微信小程序，云开发中云函数超时定义]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/89391213</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/89391213</guid><author>Z_hao_nan</author><pubDate>Fri, 19 Apr 2019 00:22:28 +0800</pubDate><description><![CDATA[在云函数中的定义里，有一个关于超时的概念，这里并不是程序实际运行的时间，而是一个预期运行的时间
比如一个程序跑下来仅用了 8ms 但是他一直在等待内部的异步操作执行完才会关闭，这里就是异步操作超时，导致整个请求超时。（20s是截止目前云函数最长运行时间）
console.log('=======  start  ===')
console.log(new Date().getTime())   /...]]></description><category></category></item><item><title><![CDATA[mpvue-fullpage的简单实现]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/89040509</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/89040509</guid><author>Z_hao_nan</author><pubDate>Fri, 05 Apr 2019 10:04:16 +0800</pubDate><description><![CDATA[自定义的fullpage效果, 其核心是top属性的改变
起步

复制此模板去自己的项目中
每一个滚动屏div添加上class:section
在totalPageNum填入当前滚动屏的数量

使用了一些技巧

css高度属性  hv, wv, 高度，宽度的视口大小， 100hv = 1 viewport height 等等
为了双向数据绑定，将变化的css属性 以style属性的方式写在了标签内...]]></description><category></category></item><item><title><![CDATA[todomvc-vue 单文件的实现]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88771838</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88771838</guid><author>Z_hao_nan</author><pubDate>Sun, 24 Mar 2019 00:44:48 +0800</pubDate><description><![CDATA[todomvc-vue 单文件的实现，可供参考

github仓库地址  https://github.com/Z-HNAN/todomvc-vue-single

快速启动

git clone https://github.com/Z-HNAN/todomvc-vue-single.git clone下来该项目
npm install 安装所需要的一些依赖
使用不同的方式进行预览

- `np...]]></description><category></category></item><item><title><![CDATA[orcl创建数据库基于DBCA-11g（图）]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88615985</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88615985</guid><author>Z_hao_nan</author><pubDate>Sun, 17 Mar 2019 11:21:29 +0800</pubDate><description><![CDATA[第1步

第2步

第3步

第4步

第5步

第6步

第7步

第8步

第9步

第10步

第11步

确认安装

最后一路等待就可以

]]></description><category></category></item><item><title><![CDATA[npm中关于依赖包冲突的问题]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88262375</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88262375</guid><author>Z_hao_nan</author><pubDate>Wed, 06 Mar 2019 23:02:04 +0800</pubDate><description><![CDATA[测试环境 npm-v 6.8.0

要了解npm解决包冲突的问题，就要先了解一下他是如何找包的
node中require查找依赖的方式
│   app.js
│
└───node_modules

一般我们们的app.js中的requier查找依赖的时候，会去目录下的node_modules去寻找
但是，实际他会以一种依次向上的方式进行寻找，这里以common模块依赖jquery为例
// co...]]></description><category></category></item><item><title><![CDATA[node中文件操作路径问题]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88244298</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88244298</guid><author>Z_hao_nan</author><pubDate>Wed, 06 Mar 2019 17:17:03 +0800</pubDate><description><![CDATA[文件分隔符

/ 左-&amp;gt; 正斜杠，\ 右 -&amp;gt; 反斜杠


在mac, linux, unix 使用 / 分隔符
在win 使用 \ 作为分隔符， 由于\存在转义的效果，一般会使用\\

win中也可以使用/



介绍path相关

path.basename

获取一个路径的文件名（默认包含拓展名）
path.basename(‘c:/a/b.js’)  -&amp;gt; b.js
pa...]]></description><category></category></item><item><title><![CDATA[node中连接数据库]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88203748</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88203748</guid><author>Z_hao_nan</author><pubDate>Tue, 05 Mar 2019 20:58:23 +0800</pubDate><description><![CDATA[mongodb数据库，基于第三方库 mongoose(高度封装了mongodb官方文件)
引入mongoose
var mongoose = require('mongoose')
var Schema = mongoose.Schema

连接数据库
mongoose.connect('mongodb://localhost/test')

设计文档结构（表结构）
段名称就是表结构中的属性名称,...]]></description><category></category></item><item><title><![CDATA[关于javascript中的分号的问题]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88082486</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/88082486</guid><author>Z_hao_nan</author><pubDate>Sat, 02 Mar 2019 22:17:58 +0800</pubDate><description><![CDATA[在开发中，有的编码规范可以对分号没有要求，可以省去分号;
let name = 'nn'
function foo(){
	return {}
}

但是在一下情况中，绝对不能省略
[,(,'（此处代表反引号）因为可能导致，编译错误，所以这样加上一句冒号，就能避免这样的错误。
;(function(){
	let foo = 'bar'	
})()

;`hello`.toString()


...]]></description><category></category></item><item><title><![CDATA[移动端适配方案总结]]></title><link>https://blog.youkuaiyun.com/Z_hao_nan/article/details/87786643</link><guid>https://blog.youkuaiyun.com/Z_hao_nan/article/details/87786643</guid><author>Z_hao_nan</author><pubDate>Wed, 20 Feb 2019 12:05:14 +0800</pubDate><description><![CDATA[对于移动端设备，通常就是解决不同设备的显示问题，总结常见布局的优缺点

流式布局
响应式布局
rem适配

在移动端的设备，需要进行视口的设置(类似于 浏览器-包含一个视口-包含我们看到的页面dom)，要最先解读到css属性所以一般放在头部
&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html&amp;amp;gt;
	&amp;amp;lt;head&amp;amp;gt;
		&amp;amp;lt;meta charset=&amp;quot;U]]></description><category></category></item></channel></rss>