搭建可靠的 JavaScript 本地开发环境 - Vagrant
为啥我在 windows 下安装 socket.io 老是报错啊;
pm2 在 windows 下怎么用啊。
无论你是前端,还是 Node.js 的研发人员,你总会看到有人问这样的问题。
或许你比较幸运,公司老大是个有钱的壕,给大家配置的都是清一色的 Mac。但是大多数玩家还停留在 windows 系统下痛苦地挣扎。
本文会介绍如何使用 Vagrant 快速维护一套可靠的本地开发环境,解决不同系统下统一开发环境的问题。
先剧透一下结局:我们会使用 Virtualbox 安装一个 Ubuntu 系统,Ubuntu 系统里安装好 Node.js 及相关环境,通过 Vagrant 配置端口转发、目录挂载和镜像管理。
前言
因为 Vagrant 使用相对简单,主要工作在 Ubuntu 内环境的配置。故本文所有操作在 Mac 系统下进行,Windows 下操作基本差不多。
Step by Step
准备工作
- 下载并安装 vagrant
- 下载并安装 VirtualBox
- 下载最新版本的 Ubuntu Vagrant box 百度网盘,路径为
<ubuntu.box>
初始化环境
- 添加 box,
vagrant box add ubuntu <ubuntu.box>
// 这样你就有了一个 box,名字叫 ubuntu - 进入项目目录
cd <project-directory>
- 初始化 vagrant
vagrant init ubunut
// 用 ubuntu 这个 box 初始化 - (optional) 修改 Vagrantfile 来修改部分配置,具体可以配置的内容见后文描述
- 启动虚拟机
vagrant up
- 登录虚拟机
vagrant ssh
安装 Node.js 环境
编译安装太慢太麻烦,我们选择从 Package Manager 安装 Node.js 环境。
原文见这里 https://github.com/nodesource/distributions,此处仅提供简要的翻译。
因为我们很明智很聪明滴选择了 Ubuntu 作为开发环境,我们可以用最新的 Node.js 5.x,步骤如下
- 在项目目录下使用
vagrant ssh
登录虚拟机 curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
#添加 nodesource 到 package managersudo apt-get install -y nodejs build-essential
#我们不仅安装最新的 Node.js,我们还安装了编译套件,用于更多需要 node-gyp 安装的模块- 等待,搞定
目录挂载
我们最终的目标是在本地开发代码,在可以正常的运行代码的环境下执行。
通过 vagrant up
命令启动时,我们会发现有一条提示信息,大致意思就是当前开发目录已经被挂载到 Ubuntu 系统下的 /vagrant
目录。
此时,我们就可以用心爱的编辑器在本地开发代码,在 Ubuntu 环境下运行代码调试效果了。
FAQ
关于提供的 Ubuntu
Vagrant 本身是可以从 https://atlas.hashicorp.com/boxes/search 仓库自动下载对应的镜像,但是你懂的,太慢了。所以我下载后提供了一个。
修改端口
编辑 vagrantfile,可以修改端口映射规则。
团队基础环境分发
Vagrant 在最新升级之后,增加了一项安全配置 config.ssh.insert_key
,该配置作用是替换 box 内默认的 public key 为新创建的 public key,确保内置的 private key 无法直接访问你的虚拟机。然而还是可以通过用户名密码登录,没什么卵用。
但是这个功能会严重影响到打包基础环境的分发,毕竟 public key 在分发时被改了。
所以,如果你是团队基础环境的搭建者,你在 vagrant init
之后应该编辑生成的 Vagrantfile
并添加 config.ssh.insert_key = false
来避免公钥被替换。
Why Vagrant, Not Docker?
搭建公共环境时,也思考过到底是 Vagrant+VM 还是 Docker。虽然 docker machine 有启动快的优点,更加轻量的优点,但是 TMD 跨平台做得太烂了。最重要的挂载目录本地开发功能,在 windows 下完全搞不定。
两套方案分别花了一天时间来折腾,最后折腾好的是 Vagrant。所以最后决定就是你了。
// 2 b continue