eggjs 反向代理

上一篇文章讲了 umi 开启 ssr 然后使用 eggjs 进行渲染的相关内容。这篇文章趁热打铁,讲一下怎么使用 eggjs 反向代理。

正向代理和反向代理区别

先搞清楚正向代理和反向代理区别,这边以浏览器访问 www.google.com 为例

正向代理(forwar proxy): 比如有正向代理服务器 http://forward-proxy.com,客户端需要先设置浏览器代理服务器(一般浏览器或操作系统都支持代理服务器设置),然后在浏览器地址栏输入 www.google.com 进行访问。我们一般科学上网就是用这种配置。

反向代理(reverse proxy): 比如有反向代理服务器 http://reverse-proxy.com 代理了 www.google.com,那么客户端不用设置浏览器代理服务器,直接在浏览器地址栏输入 http://reverse-proxy.com,就会返回 www.google.com 的内容,在客户端看来,都不知道有 www.google.com 这服务

Read More

eggjs + umi + ssr

之前写过一篇类似文章,本篇为重写

本篇教程讲 eggjs 怎么配合 umi 开启 ssr(服务端渲染)。

一、 创建 eggjs 工程

1
2
3
4
5
6
7
8
9
# 创建项目目录
mkdir ssr-with-eggjs && cd ssr-with-eggjs
# 初始化 eggjs 项目
npm init egg --type=simple
# 安装依赖
yarn
# 启动项目,测试下有没问题
yarn dev
open http://127.0.0.1:7001/

二、创建 umi 工程

1
2
3
4
5
6
7
8
9
# 创建 umi 项目目录
mkdir app/web && cd app/web
# 初始化 umi 项目
yarn create @umijs/umi-app
# 安装依赖
yarn
# 启动项目,测试下有没问题
yarn start
open http://127.0.0.1:8000

Read More

Umi 配置版本号

问题

前端发布时经常遇到这种情况:你不知道到底线上版本到底是不是最新的,虽然你把打包文件发给运维了。
当然,如果涉及到UI变动很容易判断,但是如果是一些bug修复,不涉及UI,那就比较难判断了。

解决办法

这时引入版本号,并且关联上打包时间,并在UI中添加一个地方显示版本信息。

Read More

Failed to compile bundle: /var/folders/....armv7.xar

最近在公司一台机器上打包项目时出现下面这个报错:

1
2
Failed to compile bundle: /var/folders/....armv7.xar
error: Unknown attribute kind (62) (Producer: 'APPLE_1_1200.0.32.27_0' Reader: 'LLVM APPLE_1_1103.0.32.59_0')

而我自己本地打包没问题。

公司机器环境:

ruby: 2.6
Xcode11

自己机器环境:

ruby: 2.7
Xcode12

搜索了一下,发现这篇文章说了类似问题:https://blog.embrace.io/ios-bug-bitcode/

大概原因就是:不同版本 Xcode 的 LLVM 可能不同,而低版本的 LLVM 无法读取 高版本 LLVM 编译出来的东西。(项目用到的一个静态库是用Xcode12编译的)

解决思路两个:

  1. 升级公司机器的 Xcode
  2. 用 Xcode11 重新编译编译用到的静态库

由于公司机器不好更改环境,就用 Xcode11 重新编译静态库,再重新导入项目,最后项目在 Xcode11 也能正常编译。

FLEX vs Doraemon

FLEX 和 DoraemonKit 比较

本文对 FLEXDoraemonKit 进行简单比较,两个都是很优秀的调试工具,这里只是个人感受。

异同

特性 FLEX DoraemonKit 备注
抓包 Flex 信息详细
UI 调试 Flex 交互个人觉得方便些,还支持3D渲染
沙盒查看 -
Runtime -
Keychain 查看 -
Preference 查看 -
Cookies 查看 -
日志 DoraemonKit 更好用,插件支持Lumberjack
FPS -
CPU -
Memory -
Crash -
Time Profiler -
Align Ruler 尺子

总结

FLEX 充分利用了 runtime 黑魔法,可以对对象就行查看,UI 层级调试方便感觉更方便。DoraemonKit UI设置对用户更友好些,支持插件化,功能更全,支持FPS、CPU、Memory、Time Profiler 等性能调试。DoraemonKit 会联网收集些信息,当然官方说明“不用于任何恶意用途”。

DEBUG 时其实可以同时安装这两个工具,优劣互补。

黑苹果 10.14.6 升级 10.15.4

这周五晚上手贱升级了黑苹果,一个愉快(😭)的周末就这样开始了。
先贴下我台式机的配置:

CPU: i7-8700
主板: Z370 Aorus Ultra Gaming 2.0
内存: 芝奇(G.SKILL)幻光戟RGB灯条(C16) 32GB(8G×4) DDR4 3200频率
无线网卡: BCM943602CS千兆双频5G无线网卡蓝牙4.1

原系统: 10.14.6; Clover 版本: r48xx
要升级的系统: 10.15.4

Read More

cordova allow-navigation、allow-intent 解析

cordova 项目的配置文件 config.xml 里有 allow-navigationallow-intent 两个配置。用途如下:

allow-navigation

控制哪些URL由 WebView 打开(Controls which URLs the WebView itself can be navigated to. Applies to top-level navigations only.)。
如果想让CordovaWebView能打开https://www.google.com,那么需要在config.xml里加上如下配置

1
2
3
...
<allow-navigation href="https://www.google.com" />
...

allow-intent

控制哪些URL让系统去打开(Controls which URLs the app is allowed to ask the system to open.)。
比如 sms:*、tel:*、itms-services:* 等,这些可以让系统去打开。也可以让系统打开 http:*、https:* 的链接,这时系统会调用系统浏览器打开

allow-navigation 优先级比 allow-intent 高,比如 allow-navigation 没配置 https://www.google.com, 而 allow-intent 配置了,那么就会调用系统浏览器打开链接

Read More

addScriptMessageHandler 内存泄露

今天使用 addScriptMessageHandlerWKWebView 注入方法给 js 调用时发现有内存泄露问题。

出现问题的代码

1
2
3
4
5
WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
WKUserContentController *userContentController = [[WKUserContentController alloc] init];
[userContentController addScriptMessageHandler:self name:@"nativeProcess"];
webViewConfiguration.userContentController= userContentController;
_webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height) configuration:webViewConfiguration];

原因

调用 addScriptMessageHandleruserContentController 会 retain self。而 self 又间接 retain userContentController,形成了循环引用。

Read More

h5 输入框被键盘遮挡

1
2
3
4
5
6
7
8
9
10
<input
type="digit"
onFocus={() => {
// 获取下目前 window 滚动高度,如果为0,则滚动下 window
if (window.pageYOffset === 0) {
// 200 这个值根据实际情况修改,一般可以计算下元素离页面顶部高度,然后稍微调整
window.scrollTo(0, 200);
}
}}
/>