{"id":13509460,"url":"https://github.com/youngwind/blog","last_synced_at":"2025-05-14T20:07:22.576Z","repository":{"id":46099780,"uuid":"47445046","full_name":"youngwind/blog","owner":"youngwind","description":"梁少峰的个人博客","archived":false,"fork":false,"pushed_at":"2023-09-06T13:30:30.000Z","size":7562,"stargazers_count":4667,"open_issues_count":116,"forks_count":384,"subscribers_count":859,"default_branch":"master","last_synced_at":"2025-04-13T14:06:55.309Z","etag":null,"topics":["blog","react","vue","webpack"],"latest_commit_sha":null,"homepage":null,"language":null,"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/youngwind.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-12-05T06:16:17.000Z","updated_at":"2025-04-07T09:49:26.000Z","dependencies_parsed_at":"2024-09-25T01:47:26.353Z","dependency_job_id":"5b5b4ae7-af29-41a4-aac7-71eb3b9015ec","html_url":"https://github.com/youngwind/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/youngwind%2Fblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngwind%2Fblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngwind%2Fblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youngwind%2Fblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/youngwind","download_url":"https://codeload.github.com/youngwind/blog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248724639,"owners_count":21151561,"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":["blog","react","vue","webpack"],"created_at":"2024-08-01T02:01:08.086Z","updated_at":"2025-04-13T14:07:01.017Z","avatar_url":"https://github.com/youngwind.png","language":null,"funding_links":[],"categories":["Others","个人站点"],"sub_categories":[],"readme":"# blog\n梁少峰的个人博客\n\n订阅请点 watch, 收藏请点 star, 不要点 fork\n\n想在微信上订阅？欢迎关注公众号\"前端控\"\n\n## 2018年\n\n1. [JSON.parse 三种实现方式](https://github.com/youngwind/blog/issues/115)\n1. [前端之问，程序员之问，职业之问](https://github.com/youngwind/blog/issues/114)\n1. [浏览器缓存、CacheStorage、Web Worker 与 Service Worker](https://github.com/youngwind/blog/issues/113)\n1. [Vue SSR Demo](https://github.com/youngwind/blog/issues/112)\n\n## 2017年\n\n1. [单页面应用路由实现原理：以 React-Router 为例](https://github.com/youngwind/blog/issues/109)\n1. [图解 HTTPS：Charles 捕获 HTTPS 的原理](https://github.com/youngwind/blog/issues/108)\n1. [React 事件代理与 stopImmediatePropagation](https://github.com/youngwind/blog/issues/107)\n2. [最小编辑距离问题：递归与动态规划](https://github.com/youngwind/blog/issues/106)\n1. [preact 源码学习系列之二：组件的渲染与更新](https://github.com/youngwind/blog/issues/104)\n1. [preact 源码学习系列之一：JSX解析与DOM渲染](https://github.com/youngwind/blog/issues/103)\n1. [V8引擎探索：如何注入全局变量](https://github.com/youngwind/blog/issues/102)\n1. [webpack源码学习系列之三：loader 机制](https://github.com/youngwind/blog/issues/101)\n100. [webpack源码学习系列之二：code-splitting（代码切割）](https://github.com/youngwind/blog/issues/100)\n99. [webpack源码学习系列之一：如何实现一个简单的webpack](https://github.com/youngwind/blog/issues/99)\n1. [如何实现一个异步模块加载器--以requireJS为例](https://github.com/youngwind/blog/issues/98)\n\n## 2016年\n\n1. [Mixin、多重继承与装饰者模式](https://github.com/youngwind/blog/issues/97)\n96. [你不知道的回调、异步与生成器](https://github.com/youngwind/blog/issues/96)\n95. [数组遍历、for...of、Interator接口与迭代器模式](https://github.com/youngwind/blog/issues/95)\n1. [vue源码学习系列之十一：组件化原理探索(父子组件通信)](https://github.com/youngwind/blog/issues/94)\n93. [vue源码学习系列之十：组件化原理探索(动态props)](https://github.com/youngwind/blog/issues/93)\n92. [vue源码学习系列之九：组件化原理探索(静态props)](https://github.com/youngwind/blog/issues/92)\n91. [vue早期源码学习系列之八：如何实现\"v-repeat\"列表渲染](https://github.com/youngwind/blog/issues/91)\n90. [vue早期源码学习系列之七：如何实现\"v-if\"条件渲染](https://github.com/youngwind/blog/issues/90)\n89. [vue早期源码学习系列之六：如何实现计算属性](https://github.com/youngwind/blog/issues/89)\n88. [vue早期源码学习系列之五：批处理更新DOM](https://github.com/youngwind/blog/issues/88)\n87. [vue早期源码学习系列之四：如何实现动态数据绑定](https://github.com/youngwind/blog/issues/87)\n86. [vue早期源码学习系列之三：如何写一个watch库](https://github.com/youngwind/blog/issues/86)\n85. [vue早期源码学习系列之二：如何监听一个数组的变化](https://github.com/youngwind/blog/issues/85)\n84. [vue早期源码学习系列之一：如何监听一个对象的变化](https://github.com/youngwind/blog/issues/84)\n83. [如何编写一个vue自定义指令](https://github.com/youngwind/blog/issues/83)\n82. [如何开发一个移动web UI组件库：适配篇](https://github.com/youngwind/blog/issues/82)\n81. [如何开发一个移动web UI组件库：vue插件篇](https://github.com/youngwind/blog/issues/81)\n80. [如何开发一个移动web UI组件库：构架篇](https://github.com/youngwind/blog/issues/80)\n1. [Hybrid App中web资源的离线存储与更新机制研究](https://github.com/youngwind/blog/issues/79)\n78. [我为什么要研究Hybrid App ](https://github.com/youngwind/blog/issues/78)\n77. [利用hammer.js解决300ms延时](https://github.com/youngwind/blog/issues/77)\n76. [JSBridge实现原理探索：以toast为例](https://github.com/youngwind/blog/issues/76)\n75. [真机远程调试：chrome://inspect](https://github.com/youngwind/blog/issues/75)\n1. [thief系列之四：从实现getJSON中探索XHR和promise](https://github.com/youngwind/blog/issues/74)\n1. [浏览器history api的研究](https://github.com/youngwind/blog/issues/73)\n72. [浅谈http报文与请求体格式](https://github.com/youngwind/blog/issues/72)\n1. [Mongodb与Mongoose的学习体会](https://github.com/youngwind/blog/issues/71)\n70. [自己动手写一个GithubStarManager](https://github.com/youngwind/blog/issues/70)\n69. [thief系列之三：从实现链式调用中看类数组对象与级联](https://github.com/youngwind/blog/issues/69)\n68. [babel初学者的一些常见误区](https://github.com/youngwind/blog/issues/68)\n1. [如何在redux中捕获处理ajax请求错误](https://github.com/youngwind/blog/issues/67)\n66. [使用react-transition-group引发的this.setState异步问题](https://github.com/youngwind/blog/issues/66)\n65. [webpack打包bundle.js体积大小优化](https://github.com/youngwind/blog/issues/65)\n64. [webpack打包bundle.js依赖分析](https://github.com/youngwind/blog/issues/64)\n63. [thief系列之二：从获取DOM和增删类中看js如何构造一个类](https://github.com/youngwind/blog/issues/63)\n62. [异步回调更优雅的解决方式：async](https://github.com/youngwind/blog/issues/62)\n61. [react-css-transition实战](https://github.com/youngwind/blog/issues/61)\n60. [thief系列之一：总序\u0026\u0026从第一行代码开始](https://github.com/youngwind/blog/issues/60)\n59. [将数组转化成自定义hash键的对象](https://github.com/youngwind/blog/issues/59)\n58. [redux使用的反思：状态存储 ](https://github.com/youngwind/blog/issues/58)\n57. [交互动画系列之三：react动画 ](https://github.com/youngwind/blog/issues/57)\n56. [交互动画系列之二：赛贝尔曲线 ](https://github.com/youngwind/blog/issues/56)\n55. [交互动画系列之一：解决bundle.js首次加载动画问题](https://github.com/youngwind/blog/issues/55)\n54. [rap与mock：接口定义与生成平台](https://github.com/youngwind/blog/issues/54)\n53. [try...catch、express与co错误捕获](https://github.com/youngwind/blog/issues/53)\n52. [自己动手写todolist的后端](https://github.com/youngwind/blog/issues/52)\n51. [nodejs redis实战--如何写登录模块](https://github.com/youngwind/blog/issues/51)\n1. [ie兼容性问题记录](https://github.com/youngwind/blog/issues/50)\n49. [ES6 generator 、yield 与co](https://github.com/youngwind/blog/issues/49)\n1. [shell.js与yargs命令行开发](https://github.com/youngwind/blog/issues/48)\n47. [与脚手架大战：回合2](https://github.com/youngwind/blog/issues/47)\n46. [与脚手架大战：回合1](https://github.com/youngwind/blog/issues/46)\n45. [自己动手写express中间件](https://github.com/youngwind/blog/issues/45)\n44. [nodejs使用sequelize操作数据库](https://github.com/youngwind/blog/issues/44)\n43. [nodejs使用mysql包操作数据库](https://github.com/youngwind/blog/issues/43)\n42. [Selectivizr：让IE6~IE8支持CSS3高级选择器](https://github.com/youngwind/blog/issues/42)\n41. [终端交互——inquire.js](https://github.com/youngwind/blog/issues/41)\n40. [变量检查校验相关：is.js、validator 、JSVerbalExpressions](https://github.com/youngwind/blog/issues/40)\n39. [How to remove \"sudo\" when npm install -g](https://github.com/youngwind/blog/issues/39)\n38. [一些小技巧的总结](https://github.com/youngwind/blog/issues/38)\n37. [IE8 max-width失效引起的对meta标签的思考](https://github.com/youngwind/blog/issues/37)\n36. [IE8和IE9跨域请求数据兼容性解决方案](https://github.com/youngwind/blog/issues/36)\n35. [jquery.cursor.js:自己编写的光标控制插件](https://github.com/youngwind/blog/issues/35)\n34. [es5-shim和es5-sham](https://github.com/youngwind/blog/issues/34)\n33. [Error: Does Not Satisfy Its Siblings' peerDependencies Requirements](https://github.com/youngwind/blog/issues/33)\n32. [函数自定义属性](https://github.com/youngwind/blog/issues/32)\n31. [浏览器特性检测工具：Modernizr ](https://github.com/youngwind/blog/issues/31)\n30. [利用缓存缩短npm install的时间](https://github.com/youngwind/blog/issues/30)\n29. [ie8 chartjs兼容性解决方案](https://github.com/youngwind/blog/issues/29)\n28. [ie8 placeholder兼容性解决方案](https://github.com/youngwind/blog/issues/28)\n27. [ie8 上传文件后提示下载文件](https://github.com/youngwind/blog/issues/27)\n26. [从gulpfile.js的warning联想到软件的腐败](https://github.com/youngwind/blog/issues/26)\n25. [redux组织代码之：分割action](https://github.com/youngwind/blog/issues/25)\n24. [css样式融合与类继承](https://github.com/youngwind/blog/issues/24)\n23. [react滚动加载之————react-lazy-load](https://github.com/youngwind/blog/issues/23)\n22. [react组件动态处理className](https://github.com/youngwind/blog/issues/22)\n21. [scss-lint实战碰到的一些问题以及解决方案](https://github.com/youngwind/blog/issues/21)\n20. [全局css的终结——css module](https://github.com/youngwind/blog/issues/20)\n19. [代码质量之：scss-lint](https://github.com/youngwind/blog/issues/19)\n18. [组件编写规范之：proptypes](https://github.com/youngwind/blog/issues/18)\n\n## 2015年\n\n1. [react-router 与 history的版本匹配问题](https://github.com/youngwind/blog/issues/17)\n16. [react-native：寻找像写scss那样写react native 样式的方法](https://github.com/youngwind/blog/issues/16)\n15. [初探react-native踩到的一些坑以及解决方案](https://github.com/youngwind/blog/issues/15)\n14. [在react中使用箭头函数引发的对this的思考](https://github.com/youngwind/blog/issues/14)\n13. [代码质量之：eslint](https://github.com/youngwind/blog/issues/13)\n12. [单元测试之：mocha和chai](https://github.com/youngwind/blog/issues/12)\n11. [redux精简代码之--actionType与redux-action-utils](https://github.com/youngwind/blog/issues/11)\n10. [redux精简代码之--抽象select函数和mapDispatchToProps函数](https://github.com/youngwind/blog/issues/10)\n9. [react 禁止“事件冒泡” ](https://github.com/youngwind/blog/issues/9)\n8. [config.js文件引入env字段区分测试和开发环境](https://github.com/youngwind/blog/issues/8)\n6. [gulp-preprocess 让你的项目只需要一个配置文件](https://github.com/youngwind/blog/issues/7)\n5. [利用代码片段偷懒：dash snippets](https://github.com/youngwind/blog/issues/6)\n4. [git技巧之 --set-upstream](https://github.com/youngwind/blog/issues/5)\n3. [code review](https://github.com/youngwind/blog/issues/4)\n2. [记一次如何找到Object.assign()编译方法的历程](https://github.com/youngwind/blog/issues/3)\n7. [babel配置文件的使用](https://github.com/youngwind/blog/issues/2)\n1. [初探lodash](https://github.com/youngwind/blog/issues/1)\n\n\n\n# 捐助\n\n为什么要捐助？一篇好文章可以帮助你节省大量的时间，而你的时间是相当宝贵的。\n向文章的作者提供小额捐助，可以鼓励作者写出更好的文章。这是一种良性循环，现在就行动吧！\n鼓励留言，让我认识你。\n\n![打赏](./image/wechat-ali-pay.png)\n\n# 其他订阅方式\n我们都知道，GitHub Blog 的订阅方式用起来实在是不尽人意，star 的话接收不到新 issue 通知，watch 的话有关无关通通都会接到通知，不想看的还得一个一个 unsubscribe，挺麻烦的。怎么办呢？下面是一些可供参考现成解决方案。\n\n1. [github-blogs 优化意见收集](https://github.com/yutingzhao1991/github-blogs-weekly/issues/18), By yutingzhao1991\n2. [如何使用 Feed 订阅 GitHub Issues](https://imsun.net/posts/gh-feed/), By 孙士权\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoungwind%2Fblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoungwind%2Fblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoungwind%2Fblog/lists"}