Taobao FED

高效 Node.js 开发环境之命令行工具篇

高效 Node.js 开发环境之命令行工具篇

追求更高的效率是码农不断的追求。选择合适的工具,合理搭配使用,既能提高一部分开发效率,又能改善写代码时的心情。本文介绍笔者自己平时使用的部分工具与配置,希望抛砖引玉,对大家有所帮助。每种工具或配置后都有扩展阅读的链接,方便大家做更深入的了解。

写在前面的操作系统选择

作为一个 Node.js 开发者,如果你还在用 Windows,那你一定是上辈子折翼的天使……(大雾)。Node.js 应用的开发过程需要用到大量的命令行操作,偏偏 Windows 对命令行工具的支持是最薄弱的,并且有相当一部分模块在 Windows 上无法编译通过。OS X 的内核 Darwin 是 Unix 的一个变种,基本兼容 POSIX 规范,与 Linux 一样对命令行工具有天然的良好支持,再加上优秀的 GUI,不选 OS X 选什么?什么,你说你要用 Linux?也行啊,只是本文部分优秀 GUI 工具与你无缘了:) 什么?!你一定要用 Windows ?!好吧,也有两件如意兵器在后面。

终端/命令行工具

  • iTerm2: OS X 已经自带了 Terminal.app,但如果你每天会花一个小时以上的时间面对终端软件, iTerm2 无疑是更佳的选择。除了 session 分屏、便携的快捷键、高亮搜索结果之类称手的功能,iTerm2 的强大更体现在:
    • Instant Replay:实时「重放」当前 session 之前的状态,简直是终端里的时间机器。
    • Password Manager:是否已经厌倦了在 sudo 或者 ssh 远程主机时一遍又一遍输入密码? Password Manager 可以帮你摆脱这些重复劳动。当然,免输密码的办法很多,不过这是另一个话题,以后可以再聊。
    • Captured Output:在几百几千行的 stdout/stderr 中找感兴趣的信息实在是件费眼睛费脑子的事情。Captured Output 可以直接捕获符合你定义的正则表达式的输入并将其收集起来,省去不少力气。
      iTerm2

扩展阅读 https://www.iterm2.com/features.html

  • zsh: 曾经有一位哲学家(我)说过,「bash is good, but zsh is way better!」 zsh 基本兼容 bash 的语法(新手直接 cat ~/.bashrc >> ~/.zshrc 基本上是用起来的,虽然不是 good practise),并具有以下强大的功能:
    • 基于上下文的自动补全
    • 全局别名
    • 命令拼写检查与提示
    • 命令历史管理

扩展阅读 No, Really. Use Zsh:http://fendrich.se/blog/2012/09/28/no/

  • oh-my-zsh 是 zsh 的主题与插件集合,给 zsh 锦上添花。有了 oh-my-zsh,轻轻松松更改 zsh 的提示符主题,或者增加第三方命令行工具的自动补全。我启用的 oh-my-zsh 插件有 git、git-extras、tig、nvm、npm、osx、brew、 autojump、 sudo、 history-substring-search、 docker,看官们可以酌情自选。

扩展阅读 Become A Command-Line Power User With Oh-My-ZSH And Z http://www.smashingmagazine.com/2015/07/become-command-line-power-user-oh-my-zsh-z/

zsh+oh-my-zsh

  • homebrew:不要再羡慕 Debian/Ubuntu 用户们有 apt-get 或者 CentOS/RHEL 用户们有 yum。有了 homebrew,OS X 下的包管理实在太方便了!需要一个 MySQL Server?brew install mysql。需要知道有哪些 git 相关的 package? brew search git。homebrew 不仅仅可以安装命令行工具,连 GUI 应用,也可以用它来安装更新。brew cask 一下,你就知道。

扩展阅读 Homebrew Demystified: OS X’s Ultimate Package Manager: http://computers.tutsplus.com/tutorials/homebrew-demystified-os-xs-ultimate-package-manager--mac-44884

  • git-extras:git-extras 提供了一系列 git 子命令扩展,一步完成好几个 git 原生命令或者外部命令才能搞定的操作。比如 git changelog 可快速根据 commit log 生成 Changelog,git release 可生成相应版本 tag, git pr 可以直接在 GitHub 上创建一条 Pull Request,简直是一把 git 瑞士军刀。 git-extras 可以作为 oh-my-zsh 的插件直接在 ~/.zshrc 中启用,也可以用 homebrew 执行 brew install git-extras 安装。

扩展阅读 git extras commands https://github.com/tj/git-extras/blob/master/Commands.md

  • tig:是不是觉得 tig 这个名字有些眼熟?嗯,其实就是 git 三个字母颠倒一下顺序。tig 是一个「基于文本」的 git 「图形界面」,有点儿拗口,且来看图: tig 可以在一个「文本图形界面」中使用 log/tree/diff/branch/refs/stage/stash 等操作,异常方便。

扩展阅读 The Tig Manual: http://jonas.nitro.dk/tig/manual.html

  • nvm/n:如果你需要在 Node.js 开发过程中经常切换 Node.js 包的版本,nvm/n 显然是让这个过程轻松太多的不二选择。关于 nvm/n 的比较与用法,之前有文章已经详细介绍过。但如果你是一个 nvm 的重度用户,你会发现每次用 nvm 来切换一个全新版本的 Node.js,需要用 nvm copy-packages 重新安装一次之前安装的所有全局模块,简直让人头疼。其实也有个小技巧解决:
    1. 编辑 ~/.npmrc,添加一行 prefix=~/.npm-global
    2. 编辑 ~/.zshrc 或者 ~/.bashrc,在末尾添加一行 export PATH=~/.npm-global/bin:$PATH
    3. 执行 source ~/.zshrc 或者 source ~/.bashrc

注:新版本的 nvm 考虑到一些需要编译的模块在不同 V8 版本下的问题,禁止 prefix 的用法。解决办法也很简单,删除 nvm.sh 中这三行即可:

1
2
3
if ! nvm_die_on_prefix "$NVM_DELETE_PREFIX" "$NVM_USE_CMD"; then
return 11
fi

这样无论哪个版本的 node 安装全局模块时都会安装到 ~/.npm-global,避免在切换版本后需要重新安装。

Windows 用户尊贵专场

  • cmder: 虽然 Windows 下没有 iTerm2 这样的神器,但是还是有少数终端软件在努力着,cmder 就是其中一例。简陋的 cmd.exe 与 cmder 相比,简直一个地下一个天上。cmder
  • Chocolatey:这是我唯一能找到的 Windows 下的第三方包管理工具(Windows 10 Powershell 附带的 OneGet 不,正如它的自述,”Chocolatey NuGet is a Machine Package Manager, somewhat like apt-get, but built with Windows in mind.” 类似 brew cask,Chocolatey 也可以安装 GUI 应用程序。

扩展阅读 Chocolatey official site: https://chocolatey.org/

咳,简短的介绍到此。欢大家迎拍砖,欢迎建议更棒的工具!