Node 包管理的一些心得

自从 node 变成了最主要的语言,用的多了,经验也会多一些。

node 的包管理一直是一个很烦的事情,它没有一个本地的中央仓库,所有的依赖都是项目级别的,更早之前还是以依赖进行嵌套放置的,导致大量重复的安装。

使用 nvm

node 的版本变化很快,特别是一些新的特性,一些特性在新的版本中可能就不需要使用 babel 来配置了,所以经常要切换版本。

同事就发生过一直在 5.x 下进行开发,结果当 node 换成了 6.x 或以上版本时,整个项目都无法编译,导致无法上线。

经常的将自己的代码放到新的版本里去测试,也是一个必要的事。

nvm 是最好的助手。

  • nvm install (v) - 安装一个新的版本
  • nvm use (v) - 临时切换一个版本,关闭 terminal 后失效
  • nvm alias default (v) - 设置系统默认版本

第一原则是推荐 yarn

它解决了:

  • 本地代理+缓存,这样,最少解决了速度问题,不需要每次安装都从服务器上去接,这样太慢,效率大大提升。
  • 使用多线程去下载,更快。
  • 更主要的是版本锁定,这样,就避免了因版本不一致而出现的各种问题。

我们已经在生产环境使用上了

开发环境的 global bin 迁移问题

nvm 虽然解决了 node 的版本问题,但每次升级都要对 global 的命令进行迁移,也是一件很烦的事情。

yarn 很好的解决了这个问题,在 macOS 上, yarn 的配置和文件目录被放置了在 ~/.config/yarn 下,global 的目录则对应在 ~/.config/yarn/global,这样,就和 nvm 脱离了关系。每次升级不再有 global 迁移的苦恼。

发布

发布时,要带上两个文件

  • pakcage.json
  • yarn.lock

Docker image build

如果使用 docker 时,一定要把这两个文件先进行复制,然后安装其依赖。再复制项目。

包依赖的变化不是特别频繁,这样可以重复的使用已有的 docker image layer,节约空间,提升效率。