主页

ajax、web sockets 及跨域

ajaxajax 全称 “Asynchronous Javascript + XML”,它利用浏览器原生的通信能力,能实现页面的局部更新。ajax 请求可以通过 XMLHttpRequest 对象发送;在兼容性上,IE7+, Firefox, Opera, Chrome 和 Safari 均支持原生的 XHR 对象。以下是 XHR 对象的基本使用样例: 1234567891011121314151

library一句话

yargs[猜测]首先注册命令及其选项,再解析用户输入,执行命令。 同类库:command, command-bin。

踩坑

typescript 使用 export = 导出的模块,需要使用 typescript 提供的特定语法 import let = require(“module”) 导入。参考 Typescript学习笔记(五) 模块机制。 其类型缺少调用或构造签名的表达式无法使用 “new”:在 .d.ts 文件中声明包含 new 方法的接口。 webpack webpack_require(…) is

webpack-dev-server 一些设计点

整体流程webpack-dev-server 通过 express 构建服务,以下是它的整体流程: validateOptions:使用 schema-utils 校验配置选项。 normalizeOptions:处理选项,混入默认配置。 updateCompiler:酌情为 webpack 添加 HotModuleReplacementPlugin 插件,socket 通信客户端脚本。 将选项

webpack加载器编程

原理loader 是导出为函数的 js 模块,它支持同步模式、异步模式。同步模式有两种编程方式,其一使用 return 返回结果作为下一个加载器的资源,其二使用 this.callback 传入结果。异步模式使用 this.async 开启,在 this.async 执行过程中再调用 this.callback 语句,以启用下一个加载器的执行逻辑。官方推荐使用异步模式,这样可以提升 webpack

$PATH, nvm, npm, lerna

mac 环境变量命令一旦添加到环境变量中,系统就知道从哪个路径中取出文件并执行。mac 有多个环境变量文件,不同的环境变量文件的作用域和加载时间也不同。在 mac 中,不同的 shell 所对应的配置文件也不同:bash 命令对应的配置文件是 .bash_profile;zsh 命令对应的配置文件是 .zshrc。 rc 即为 run command,一般为脚本类文件的后缀,这些脚本通常在程序启动

前端代码检查及美化

lintlint 检查可借助 eslint, tslint, stylelint,这里暂时不作详解。 prettierprettier 库 用于代码格式化。官方说法,prettier 的美化方案比较武断;因为它在改动代码期间并未执行 lint 检查。在使用 prettier 时,首先需要安装 prettier;然后创建 .prettierrc, .prettierignore 配置文件;最后执行

webpack动态导入

代码分割webpack 官方文档 动态导入 部分已指示我们,可使用 es 提案中的 import() 或 webpack 提供的 require.ensure 语法懒加载代码。我们按下 require.ensure 不表,只介绍 import()。webpack 官方所提供的示例如下: 1234567891011async function getComponent() { var e

双向数据绑定

有幸在公司里做了几次面试官,当我每次问及 Vue 双向绑定的实现机制时,被问者通常只会点到 Object.defineProperty,很少能提到观察者模式。因此,写作本文的目的一方面在于深入了解 Vue 的实现原理,另一方面在于增强有关 ViewModel 双向绑定、前端数据流等的提问能力。众所周知的,当我们阅读技术文章或源码时,如果不能持续有效地发问,那我们会陷入复刻他人思维的僵局里。言归正传

umi中的插件和路由机制

上图是 umi 的架构图,本文聚焦于解读 umi 的插件和路由机制。umi 中的插件机制支撑了插拔式命令、嵌套插件、运行时插件、文件生成器、生命周期钩子系统等功能;路由机制用于将 src/pages 解析为路由信息,又支持配置路由、运行时动态扩展。插件和路由机制的核心源代码都由 umi-build-dev 包提供。文中所给代码均经过一定程度的删减,只保留核心代码部分。 af-webpack同大多