之前在 create-react-app教程-使用篇 中介绍了create-react-app的基本使用,
为了便于理解一个脚手架脚本是如何运作的,现在来看一下 create-react-app v1.5.2 的源码
入口index.js
create-react-app 一般会作为全局命令,因为便于更新等原因,create-react-app 只会做初始化仓库 执行当前版本命令等操作。
找到 create-react-app 入口index文件:
之前在 create-react-app教程-使用篇 中介绍了create-react-app的基本使用,
为了便于理解一个脚手架脚本是如何运作的,现在来看一下 create-react-app v1.5.2 的源码
create-react-app 一般会作为全局命令,因为便于更新等原因,create-react-app 只会做初始化仓库 执行当前版本命令等操作。
找到 create-react-app 入口index文件:
原文地址: How Browsers Work: Behind the scenes of modern web browsers
这是一篇全面介绍 WebKit 和 Gecko 内部操作的入门文章,是以色列开发人员塔利·加希尔大量研究的成果。在过去的几年中,她查阅了所有公开发布的关于浏览器内部机制的数据(请参见资源),并花了很多时间来研读网络浏览器的源代码。她写道:
在 IE 占据 90% 市场份额的年代,我们除了把浏览器当成一个“黑箱”,什么也做不了。但是现在,开放源代码的浏览器拥有了过半的市场份额,因此,是时候来揭开神秘的面纱,一探网络浏览器的内幕了。呃,里面只有数以百万行计的 C++ 代码…
塔利在她的网站上公布了自己的研究成果,但是我们觉得它值得让更多的人来了解,所以我们在此重新整理并公布。
作为一名网络开发人员,学习浏览器的内部工作原理将有助于您作出更明智的决策,并理解那些最佳开发实践的个中缘由。尽管这是一篇相当长的文档,但是我们建议您花些时间来仔细阅读;读完之后,您肯定会觉得所费不虚。
保罗·爱丽诗 (Paul Irish),Chrome 浏览器开发人员事务部
网络浏览器很可能是使用最广的软件。在这篇入门文章中,我将会介绍它们的幕后工作原理。我们会了解到,从您在地址栏输入 google.com 直到您在浏览器屏幕上看到 Google 首页的整个过程中都发生了些什么。
大家都知道js十分依赖浏览器(或Node环境),不同浏览器对js的支持不尽相同。现如今ECMAScrip标准的更新已经到了一年一次的节奏,
Babel 就是为了解决这个问题 ,它可以将使用新标准的JavaScript代码转换为浏览器支持可以运行的JavsScript(ES5)代码。
1 | //例如babel将这段代码 |
假设在react项目配置webpack:
一、安装npm包:
1 | npm install --save-dev babel-loader babel-core babel-plugin-transform-runtime babel-preset-es2015 babel-preset-react webpack-preset-babel-stage-0 |
二、在webpack配置文件中添加规则:
1 | module: { |
**三、 在项目根目录创建名为.babelrc的文件,这是Babel的配置文件 **
在配置文件中安装插件(plugins)或预设(presets,也就是一组插件)来指示 Babel 去做什么事情。在下面配置中:
babel-preset-es2015 打包了 es6 的特性;
babel-preset-stage-0 打包处于 strawman 阶段的语法;
babel-preset-react 打包react全家桶语法;
Babel 几乎可以编译所有时新的 JavaScript 语法,但对于 APIs 来说却并非如此。例如: Promise、Set、Map 等新增对象,Object.assign、Object.entries等静态方法,babel-plugin-transform-runtime为了达成使用这些新API。
1 | //.babelrc内容 |
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将 Chromium 和 Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。
相信大部分前端同学都听说或者了解过NodeJs 它是一个基于Chrome V8 引擎的JavaScript运行时, 而 Chromium 是Google为发展自家浏览器Chrome而开启的开源浏览器项目,可以看成是是Chrome的先行版。大家较为熟悉的VS Code 和 Atom就是使用Electron来完成的。
从开发的角度来看, Electron application 本质上是一个 Node. js 应用程序。可以让前端开发者让你使用纯 JavaScript 调用丰富的原生操作系统APIs来创造桌面应用~
确认你的网络可以访问github , 若访问受限参考 安装指南 来了解如何用代理、镜像和自定义缓存
你肯定已经已经安装好git和node了,那么只要:
1 | # 官网已经有 electron-quick-start 仓库克隆下来 |
然后你的第一个桌面应用就开启了!

若你跟着一起实践到这里,肯定会发现界面有些许不同?我这里多了个调试界面,那么来看下代码看看。在Electron中main.js是入口文件:
1 | //main.js |
迫于不会Vue ,在这里介绍下React工程如何和Electron结合起来。
本文是关于 redux(3.7.2)源代码的一些浅读
在redux源码目录中 ,可以看到以下文件目录:
1 | |-- utils/ |
与文件对应的,主要也是介绍 createStore compose combineReducers bindActionCreators applyMiddleware这几个函数。
介绍原始写法 & 及其改进写法一
还有比较流行的 styled-components在RN中的使用 & 及其改进写法二
1 | /** |
原写法的缺点在于变量不好引入,不好体现样式间的关系,没有计算表达式等……
分类的实现原理,编译时的表现,运行时的加载原理
参考文档: objc4-723
category的主要作用是为已经存在的类添加方法。可以把类的实现分开在几个不同的文件里面。
Category用Category_t结构体定义:
1 | typedef struct category_t { |
介绍 对象关联,以及如何为Category添加weak属性
apple open source
创建一个类的分类Category,并添加一个属性CategoryProperty,分类中的@CategoryProperty并没有帮我们生成实例变量以及存取方法,要求我们手动实现,这时候就需要用到对象关联。
在分类中,因为类的实例变量的布局已经固定,使用 @property 已经无法向固定的布局中添加新的实例变量(这样做可能会覆盖子类的实例变量),所以我们需要使用关联对象以及两个方法来模拟构成属性的三个要素。
关联对象又是如何实现并且管理的呢: