ld: library not found for -lgcc_s.10.5 在 Mac 下 NPM 编译安装的常见错误

情况:通过 Node 的 NPM 编译安装某些模块的时候报错:

ld: library not found for -lgcc_s.10.5  
clang: error: linker command failed with exit code 1 (use -v to see invocation)  

解决方案:
到 AppStore 中安装 XCode 7。装完以后,打开 XCode 并且接受 license 协议。更新之后,node-gyp 编译就没有这个问题了。

mac 网络模拟工具

先说需求,为了测试手机应用在各种网络下的情况,所以准备找一个模拟各种网络情况的工具。

其他平台的模拟工具: Linux 平台:Facebook 的开源移动网络测试工具 Augmented Traffic Control(ATC)
Windows 平台:微软 visual studio 自带的网络模拟工具 Network Emulator for Windows Toolkit (NEWT)

因为工作环境的问题,这里讨论 mac 下 xcode 自带的 Network Link Conditioner(NLC)

安装

NLC 是 xcode 的插件,可以在 “Ha[......]

阅读全文

mac osx 应用跨屏幕

一般情况下 mac osx 中一个应用程序只能在一个屏幕上显示,作为从 windows 转过来的用户有点不太习惯,Goolge 后发现还是有解决方案的(虽然不是很好用)。

打开 Mac 的系统偏好设置 -> Mission Control -> 勾掉 显示器具有单独的 Spaces (Displays have separate Spaces)然后注销一下,这样一个应用的窗口就可以跨多个屏显示了。

详细见 http://arstechnica.com/apple/2013/10/os-x-10-9/11/

Github rebase

首先前提是是在 github 上参与多人的项目。因为每个人写的提交的时间不一致,互相之间的提交可能参差不齐,不方便阅读。
所以为一个多人项目写好某个功能点的时候,或者是你 fork 了某个项目想要 PR 给原项目的时候,最好能够把提交的记录都各自重排一下,把各自一块的提交排列到一起,保持历史记录的可读性。

为了做到这个,在开发新功能的时候最好先建一个新的分支。在分支上写好之后(这个时间跨度不一定),先把原项目上最新的代码拉去到本地。然后再切换到你开发新功能的分支进行 rebase。

git checkout master # 确保你当前在 master 中
git remo[......]

阅读全文

node.js Error: EBADF, write

最近工作写了个小项目,本以为能好好喝下茶,可是让人想掀桌的报错出现了。

fs.js:77
      throw err;  // Forgot a callback but don't know where? Use NODE_DEBUG=fs
            ^
Error: EBADF, write
    at Error (native)

WTF?! fs.js: 77? 这是要我去看内核源代码?好在项目还不大,拆拆更健康。花了半天的时间之后大概是清楚了。

首先是 Error 的名字 EBADF 其意义是 bad file descriptor[......]

阅读全文

node.js Error: stdout maxBuffer exceeded

在使用 child_process 模块中的 exec 、execFile、spawnSync、execFileSync、execSync 方法时需要注意其 options 参数中的 maxBuffer 项。

以上方法在执行时会在内存中建一个 buffer 来缓冲组合所有的输出数据,而 maxBuffer 则是指定该 buffer 大小的地方。如果输出超过指定的大小则会报 maxBuffer exceeded 的错误。

解决方案是执行的时候估计好大小,设置更大的 maxBuffer:

var exec = require('child_process').exec;

v[......]

阅读全文