{"id":13672929,"url":"https://github.com/huruji/blog","last_synced_at":"2025-08-21T09:32:47.401Z","repository":{"id":53258316,"uuid":"100508330","full_name":"huruji/blog","owner":"huruji","description":"红日初升，其道大光:sun_with_face::house_with_garden:请star或watch，不要fork","archived":false,"fork":false,"pushed_at":"2023-12-16T16:33:50.000Z","size":60,"stargazers_count":159,"open_issues_count":101,"forks_count":11,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-12-08T03:11:33.003Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://juejin.im/user/5894886f2f301e00693a3e49/posts","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/huruji.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-08-16T16:08:52.000Z","updated_at":"2024-11-15T08:25:47.000Z","dependencies_parsed_at":"2024-01-17T04:18:50.822Z","dependency_job_id":null,"html_url":"https://github.com/huruji/blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huruji%2Fblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huruji%2Fblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huruji%2Fblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huruji%2Fblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/huruji","download_url":"https://codeload.github.com/huruji/blog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230507051,"owners_count":18236944,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T09:01:57.983Z","updated_at":"2024-12-19T22:07:30.827Z","avatar_url":"https://github.com/huruji.png","language":"TypeScript","readme":"\n\u003ch1 align=\"center\"\u003e灰风GreyWind的技术部落格\u003c/h1\n\u003e PS：灰风也叫忽如寄\n\n\n\u003e 在这里将会记录我的源码分析历程、我的技术日志、我的生活感悟。\n\n\u003e 如果你对我的博客文章感兴趣，或许你也会喜欢我以前写过的文章，你可以在这里找到我以前的文章。[http://www.jianshu.com/u/351f85c16861](http://www.jianshu.com/u/351f85c16861)\n\n#### 目录\n\n#### 2019-03\n\n- [async await 的错误处理 ](#61)\n\n#### 2019-02\n\n- [webpack 的 chunk ](#59)\n\n\n#### 2019-01\n\n- [如何让你的回调 Promise 化 ](#58)\n\n- [通过 Webpack 的 compiler 对象的 Hooks 学会编写 Webpack 插件的编写](#57)\n\n- [Webpack 的 stats 、Compilation、compiler 对象里都有啥](#56)\n\n#### 2018-11\n- [如何编写一个babel插件 ](#55)\n\n- [webpack打包出来的文件都是啥](#54)\n\n- [minipack源码解析](#53)\n\n#### 2018-09\n\n- [如何优雅地链式取值](#51)\n\n- [图像处理的滤镜算法](#50)\n\n#### 2018-08\n- [IOS下box-shadow的诡异bug的修复](#47)\n\n#### 2018-07\n- [D2-天猫超市Mobile Web的极致体验优化 - 学习笔记](#45)\n\n\n\n\n#### 2018-06\n- [NumPy使用](#44)\n\n\n#### 2018-05\n- [一文带你了解babel-preset-env](#43)\n\n- [关于Babel 6的 loose mode](#42)\n\n- [Rollup初探](#41)\n\n- [从ECMAscript标准文档看懂valueOf](#40)\n\n- [一段柯里化函数代码阅读](#39)\n\n- [Rails路由](#38)\n\n- [Rails布局和视图渲染](#37)\n\n- [Active Record 数据验证](#36)\n\n- [Active Record 迁移](#35)\n\n#### 2018-04\n\n- [Active Record基础](#34)\n\n- [使用rails实现最简单的CRUD](#33)\n\n- [for循环异步操作问题小结](#29)\n\n#### 2018-02\n\n- [使用express-validator对你的Express应用的用户数据进行验证](#21)\n\n- [使用validator.js对字符串数据进行验证](#20)\n\n#### 2018-01\n\n- [Shell的字符串处理](#19)\n\n- [Shell编程快速入门指南](#18)\n\n#### 2017-11\n\n- [动手实现一个AMD模块加载器(三)](#17)\n\n#### 2017-10\n\n- [动手实现一个AMD模块加载器(二)](#16)\n\n- [动手实现一个AMD模块加载器(一)](#13)\n\n- [Node.js开发多进程应用](#15)\n\n- [Node.js的进程process](#14)\n\n- [使用Koa + mysql一小时搭建个人博客](#11)\n\n#### 2017-09\n\n- [动手实现一个JSONP](#9)\n\n- [Webpack系列——关于Webpack-dev-server配置的点点滴滴](#10)\n\n- [Webpack系列——手把手教你使用Webpack搭建简易的React开发环境](#8)\n\n- [Webpack系列——Webpack + xxx配合使用](#7)\n\n- [Webpack系列——快速入门](#3)\n\n- [Android布局练习—计算器](#5)\n\n- [Android布局笔记(未完待续)](#4)\n\n#### 2017-08\n\n- [使用react-router4.0实现重定向和404功能](#2)\n\n- [动手实现一个最简单的redux](#1)\n\n\n\n### 源码阅读计划\n\n\u003e 计划赶不上变化，orz\n\n1.模板引擎类\n\n- [ ] [aui/art-template](https://github.com/aui/art-template)\n- [x] [tj/ejs](https://github.com/tj/ejs)，[ejs项目源码阅读](https://github.com/huruji/blog/issues/28)\n\n2.React相关\n\n- [x] [reactjs/redux](https://github.com/reactjs/redux)\n\n3.Node.js项目\n\n- [x] [welkinwong/nodercms](https://github.com/welkinwong/nodercms)，[nodercms项目源码阅读](https://github.com/huruji/blog/issues/22)\n\n- [x] [substack/node-mkdirp](https://github.com/substack/node-mkdirp)，[node-mkdirp项目源码阅读](https://github.com/huruji/blog/issues/23)\n\n- [x] [isaacs/pseudomap](https://github.com/isaacs/pseudomap)，[pseudomap项目源码阅读](https://github.com/huruji/blog/issues/24)\n\n- [x] [developit/resource-router-middleware](https://github.com/developit/resource-router-middleware)，[resource-router-middleware项目源码阅读](https://github.com/huruji/blog/issues/25)\n\n- [x] [expressjs/cookie-parser](https://github.com/expressjs/cookie-parser)，[cookie-parser项目源码阅读](https://github.com/huruji/blog/issues/27)\n\n4.Vue相关\n- [x] [bailicangdu/vue2-happyfri](https://github.com/bailicangdu/vue2-happyfri) Vue全家桶入门级项目\n\n\u003ch2 align=\"center\"\u003e2019-03\u003c/h2\u003e\n\n\u003ch3 id=\"61\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/61\"\u003easync await 的错误处理\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/61\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://img14.360buyimg.com/jrmarketingcloud/jfs/t1/27599/30/9990/377761/5c8207c7Ed034d840/ccafbf0e8e8fac59.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\n\u003ch2 align=\"center\"\u003e2019-02\u003c/h2\u003e\n\n\u003ch3 id=\"59\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/59\"\u003ewebpack 的 chunk \u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/59\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://upload-images.jianshu.io/upload_images/1641380-7aa6bf46649ef6ac.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\n\n\u003ch2 align=\"center\"\u003e2019-01\u003c/h2\u003e\n\n\u003ch3 id=\"58\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/58\"\u003e如何让你的回调 Promise 化  \u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/58\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/41ef57cf9b98e8d0d3a6b51134c1e4ae6722fb92/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d636130356261323762366436366632322e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003ch3 id=\"57\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/57\"\u003e通过 Webpack 的 compiler 对象的 Hooks 学会编写 Webpack 插件的编写 \u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/57\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://upload-images.jianshu.io/upload_images/1641380-7a53c2589896b578.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch3 id=\"56\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/56\"\u003eWebpack 的 stats 、Compilation、compiler 对象里都有啥 \u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/56\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://upload-images.jianshu.io/upload_images/1641380-5c2f42a03c9f0233.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003e2018-11\u003c/h2\u003e\n\n\u003ch3 id=\"55\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/55\"\u003e如何编写一个babel插件 \u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/55\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/48671346-81fd0d00-eb61-11e8-8c32-da60d3bbe17a.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003ch3 id=\"54\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/54\"\u003ewebpack打包出来的文件都是啥\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/54\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/48826125-79e0df80-eda4-11e8-9ca3-86ff654f5fac.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003ch3 id=\"53\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/53\"\u003eminipack源码解析\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/53\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/48826170-97ae4480-eda4-11e8-9185-504a2f3744a9.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch2 align=\"center\"\u003e2018-09\u003c/h2\u003e\n\n\u003ch3 id=\"51\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/50\"\u003e如何优雅地链式取值 \u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/51\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/45597944-66ad3e80-ba06-11e8-8042-26d00e4d4d73.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003ch3 id=\"50\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/50\"\u003e图像处理的滤镜算法 \u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/50\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/45564506-3a1ce980-b883-11e8-9a13-77ddc786730d.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\u003ch2 align=\"center\"\u003e2018-08\u003c/h2\u003e\n\n\n\u003ch3 id=\"47\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/47\"\u003eIOS下box-shadow的诡异bug的修复\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/47\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/e4ed9d36157360f10b9d1bafeeb118278a2b3c05/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d656230383536643761393931653135632e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch2 align=\"center\"\u003e2018-07\u003c/h2\u003e\n\n\n\u003ch3 id=\"45\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/45\"\u003eD2-天猫超市Mobile Web的极致体验优化 - 学习笔记\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/45\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/7763ff6aec3f1956a521dcc4b7f8c8987fce8f38/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d386230626465333035336264336530642e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2018-06\u003c/h2\u003e\n\n\n\u003ch3 id=\"44\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/44\"\u003eNumPy使用\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/44\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/39f057c3e55ce4722ecd6491d3c19556ed2dae7c/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d616534333535313938333138346335652e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch2 align=\"center\"\u003e2018-05\u003c/h2\u003e\n\n\n\u003ch3 id=\"43\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/43\"\u003e一文带你了解babel-preset-env\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/43\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/226cb1e161cc13d622fa20d4a9de5208bb2ea73a/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d383865383162383834646537393534322e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch3 id=\"42\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/42\"\u003e关于Babel 6的 loose mode\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/42\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/d01ca4e9c3e532ada4e435c3e83e2ef4b6444e6b/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d353566653036616261636361313462622e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\u003ch3 id=\"41\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/41\"\u003eRollup初探\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/41\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/d4a290d0fda66130f70da41c4b9e017a068b4803/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d393930336263326439346331613864622e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"40\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/40\"\u003e从ECMAscript标准文档看懂valueOf\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/40\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/9bbb81b74c35ebf4bcf8c375e74cdd7d28ff63c7/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d353665633135336463356130373230622e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\u003ch3 id=\"39\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/39\"\u003e一段柯里化函数代码阅读\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/39\"\u003e\n  \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/40008491-0531d4d6-57d2-11e8-9d61-a1d20f98f649.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"38\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/38\"\u003eRails路由\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/38\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/809b556467c52bd28d04e4e7c176e06c89790ba9/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d313966643336343465623264633131392e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"37\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/37\"\u003eRails布局和视图渲染\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/37\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/545e83ffef266266ee9a9188572f05e5cc90572b/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333861613831383535653432346233662e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"36\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/36\"\u003eActive Record 数据验证\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/36\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/142d2f7875e3ef7e8530533d841dbae67c8e8424/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d643438333833643035616633383238642e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"35\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/35\"\u003eActive Record 迁移\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/35\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2018-04\u003c/h2\u003e\n\n\n\n\u003ch3 id=\"34\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/34\"\u003eActive Record基础\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/34\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/0359bd5e5c1ab4b483f370abaa579b90fe5fa29b/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d396331643931306164353935306532382e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"33\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/33\"\u003e使用rails实现最简单的CRUD\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/33\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/430c7c9350d98f72741ee3bba841f19da10fca30/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d656266323333653331303239313432662e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"29\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/29\"\u003efor循环异步操作问题小结\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/29\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/e46eb6337970c7e77b750fbd2ae11c32ede27a78/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d353566383232613062643063626466372e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2018-02\u003c/h2\u003e\n\n\n\n\u003ch3 id=\"21\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/21\"\u003e使用express-validator对你的Express应用的用户数据进行验证\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/21\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/e78ca6c95c04b3928d4a8ca15b22feff23605680/687474703a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d646139336361383135356435396231662e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\n\u003ch3 id=\"20\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/20\"\u003e使用validator.js对字符串数据进行验证\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/20\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/e78ca6c95c04b3928d4a8ca15b22feff23605680/687474703a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d646139336361383135356435396231662e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2018-01\u003c/h2\u003e\n\n\n\n\u003ch3 id=\"19\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/19\"\u003eShell的字符串处理\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/19\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/119f27d4d791db9de32e3adf9413590e9995697b/687474703a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d396234373033623334633763633530362e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"18\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/18\"\u003eShell编程快速入门指南\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/18\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/34666912-95d978ac-f4a1-11e7-98b8-39b29a7fa31e.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2017-11\u003c/h2\u003e\n\n\n\n\u003ch3 id=\"17\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/17\"\u003e动手实现一个AMD模块加载器(三)\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/17\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/32406601-58498df6-c1b6-11e7-8ae3-ccbc60ced774.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2017-10\u003c/h2\u003e\n\n\n\n\u003ch3 id=\"16\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/16\"\u003e动手实现一个AMD模块加载器(二)\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/16\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/e7cfc5f7db47298f9fdbced15f351bf9dcaa1d2e/68747470733a2f2f706963322e7a68696d672e636f6d2f38302f76322d39656564373937663934323064656631653730343564353532363863613233645f722e6a7067\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\u003ch3 id=\"13\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/13\"\u003e动手实现一个AMD模块加载器(一)\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/13\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/31510748-faed62b4-afb7-11e7-88fb-9838b82a367b.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch3 id=\"15\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/15\"\u003eNode.js开发多进程应用\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/15\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/31787867-9553d036-b53f-11e7-9541-733746595592.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch3 id=\"14\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/14\"\u003eNode.js的进程process\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/14\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/31680562-3cc45416-b3a7-11e7-9b85-d904fbae9ee0.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch3 id=\"11\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/11\"\u003e使用Koa + mysql一小时搭建个人博客\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/11\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://user-images.githubusercontent.com/15937065/31680562-3cc45416-b3a7-11e7-9b85-d904fbae9ee0.jpg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2017-09\u003c/h2\u003e\n\n\n\n\n\u003ch3 id=\"9\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/9\"\u003e动手实现一个JSONP\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/9\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/558705a44e73ebf0d1bec93a1d04fb3d3493a562/687474703a2f2f736f686f696e7465726163746976652e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f30322f6a736f6e702d6a736f6e2d776974682d70616464696e672e676966\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\n\u003ch3 id=\"10\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/10\"\u003eWebpack系列——关于Webpack-dev-server配置的点点滴滴\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/10\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\n\u003ch3 id=\"8\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/8\"\u003eWebpack系列——手把手教你使用Webpack搭建简易的React开发环境\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/8\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\n\u003ch3 id=\"7\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/7\"\u003eWebpack系列——Webpack + xxx配合使用\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/7\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\n\u003ch3 id=\"3\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/3\"\u003eWebpack系列——快速入门\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/3\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\n\u003ch3 id=\"5\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/5\"\u003eAndroid布局练习—计算器\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/5\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\n\u003ch3 id=\"4\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/4\"\u003eAndroid布局笔记(未完待续)\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/4\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\u003ch2 align=\"center\"\u003e2017-08\u003c/h2\u003e\n\n\n\n\n\n\u003ch3 id=\"2\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/2\"\u003e使用react-router4.0实现重定向和404功能\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/2\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n-----\n\n\n\n\n\n\u003ch3 id=\"1\"\u003e\u003ca href=\"https://github.com/huruji/blog/issues/1\"\u003e动手实现一个最简单的redux\u003c/a\u003e\u003c/h3\u003e\n\n\u003cp style=\"text-align:center\"\u003e\n  \u003ca href=\"https://github.com/huruji/blog/issues/1\"\u003e\n    \u003cimg  width=\"100%\" src=\"https://camo.githubusercontent.com/8d4a91e30c7c00fadc0811333bb68dbf289c32a4/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f313634313338302d333335633733363539356132376661352e6a70673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuruji%2Fblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuruji%2Fblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuruji%2Fblog/lists"}