Deep Linking:从浏览器调起 APP

URI-Scheme Universal-Links App-Links Intent iOS Android

Deep Linking 只是一个概念, 是指通过一个链接进入另一个网站/App,并直接浏览其内部的某个页面。 Deep Linking 给用户带来的是非常顺滑的浏览体验,尤其在 Web 世界中 Deep Linking 的实现非常容易。

但如果要进入 App 并定位到对应的页面则较为困难,URI Scheme, Universal Links, Android App Links, 以及 Chrome Intent 都是为了解决从 Web 页面 Deep Linking 到 App 而做的尝试。 本文从 Web 一侧的视角总结调起 App 的各种实现方式,能达到的效果,以及对应的兼容性问题。

继续阅读

合理地设计 URL

HTTP URL 路由

URL 是 Web 三大基石之一,在 Web 开发、运维和使用过程中随处可见。 而且在 Web 开发中遇到的第一个设计问题,可能就是 URL 的设计。 在很多 MVC 架构下的开发者眼中它的作用却只是路由到一个控制器,这正是一切罪恶的开端。

继续阅读

禁用 package-lock

NPM Node.js 缓存 版本

npm(Node Package Manager)是由 JavaScript 编写的 Node.js 默认的包管理工具, 会随 Node 一起安装。NPM 是伟大的工具,在它的基础上构建了现在的整个 JavaScript 生态。 这些模块有每周数十亿的下载量,可以用来构建 Web 服务命令行工具,IoT 节点, 桌面应用,甚至操作系统。

npm 5.0 开始会自动生成 package-lock.json,解决 npm 无法递归锁定版本的问题(类似 yarn)同时使用该文件作为缓存来加速依赖解析。 但现在看来 package-lock 制造的问题比解决的问题还要多,有些争议性的处理细节仍在讨论。

Harttle 不建议现在使用 package-lock,文章尾部给出了禁用 package-lock 的方式。

继续阅读

恢复 TMUX 工作区

Bash Session Tmux

Harttle 此前介绍过 Tmux 的使用,我们知道 Tmux 可以把所有打开的 Shell 都保存在服务器。 你的 Terminal 重启不会丢失任何东西,但 Server 重启后 Session 会全部丢失。 如果你像 Harttle 一样在开发 PC 本地运行 Tmux Server 的话,每次开机后都需要重新建立各种会话和窗格。

本文介绍一个 Tmux 插件:tmux-resurrect, 可以一键保存当前 Tmux 状态,包括 Session、Window、Pane 布局,甚至 Vim 状态也可以恢复。

如果你更偏向 The Hard Way,可以参考 恢复 TMUX 工作区 - The Hard Way,手动完成一切初始化工作。

继续阅读

CLI 测试:文件与标准输出

BDD Mocha Node.js 测试 Ramdisk

利用 Mocha 进行 BDD 风格测试 中介绍了 Node.js 下如何做单元测试,要确保软件的质量我们还需要 e2e 测试, 确保整个系统在真实场景下能够正常工作。

End-to-end testing involves ensuring that the integrated components of an application function as expected. The entire application is tested in a real-world scenario such as communicating with the database, network, hardware and other applications. – techopedia

本文 Node.js 的命令行程序(CLI)为例,介绍如何测试一个可执行程序的输入输出以及文件修改。 样例代码可参考 APM 的 e2e 测试代码

继续阅读

客户端渲染有哪些坑?

MVVM 异步渲染 路由 兼容性 pushState popstate

从别的角度出发,客户端渲染有很多其他名字比如前端渲染、前端异步、前端 MVC。 今天的 Web 稍有交互的站点都会做一套前端渲染,从早期的 Backbone,AngularJS 1.0, 到现在的流行的 Vue,React。基于这些技术做 MVVM 的同时甚至可以完成服务器端渲染。 但浏览器的客户端渲染(也就是前端 MVC)仍然存在不少限制,这些限制都是前端渲染绕不过的问题。

继续阅读