我记得我在知乎 Q3 的个人 OKR 中定下了一个小目标,就是学习 Node.js,可是现在 Q4 都过去一半了,Node 的毛也没学。

为了圆之前吹过的牛逼,同时也为了之后我将与 classTC 同学一起做的项目,我决定好好学习一下。先从环境搭建做起。

其实 Node 的环境是很好搭建的,直接在官网在上下载最新 Binary Package 安装就可以了,可是为什么还要用 Vagrant 呢?

因为我曾经在一期 TeaHour.fm 的节目中听到过,要养成把写代码的环境和生产的环境保持一致的好习惯。而 Vagrant 就可以做到这一点,不知道的同学可以去官网了解一下。

  • 首先安装 vagrant + virtual box
  • mac 上创建一个目录并进入,比如我的目录是 vagrant
  • 执行 vagrant init
  • 安装 Ubuntu 14.04 box(当然你也可以选择其它 box,你生产环境用什么,这里就用什么 box)

    vagrant box add ubuntu/trusty64 (此步骤执行时间取决于网速,做好心理准备)

    如果报错,执行 sudo rm /opt/vagrant/embedded/bin/curl 后再执行一遍上一条命令

  • vagrant up 根据当前 Vagrantfile 启动 vagrant
  • vagrant ssh ssh 进入当前的 vagrant 环境,进行一些 setup 的工作

    在 vagrant 中执行 mkdir helloworld 创建一个和 mac 共享的目录
    logout 退出 ssh

  • 在 mac 上的 vagrant 目录创建一个目录 mkdir helloworld 用于与 vagrant 共享
  • 编辑 Vagrantfile

熟悉 CocoaPods 的同学看着下面的文件应该很亲切

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# -*- mode: ruby -*-
# vi: set ft=ruby :
# 这里的 host 指的是我们的电脑 -> 也就是 mac
# guest 指的是 Ubuntu
Vagrant.configure("2") do |config|
# 指定我们使用的 box
config.vm.box = "ubuntu/trusty64"
# 禁用掉自动更新,当然啦,这行是 optional 的
config.vm.box_check_update = false
# 假定我们的 node 程序跑在 8080 端口,我们把这个端口转发出来给 mac,
# 在 mac 上也就能通过 http://localhost:8080 访问跑在 Ubuntu 上的 node 应用了
config.vm.network "forwarded_port", guest: 8080, host: 8080
# 映射共享文件夹
config.vm.synced_folder "path-to-vagrant/vagrant/helloworld", "/home/vagrant/helloworld"
# 这下面的命令可以通过 `vagrant provision` 来执行,进行一些 Ubuntu 环境的初始化工作
# 不需要每次都执行,有变更了执行就好
config.vm.provision "shell", inline: <<-SHELL
apt-get update
sudo apt-get install nodejs -y
sudo apt-get install npm -y
SHELL
end
  • vagrant reload 重启 vagrant
  • vagrant provision 安装我们在 Vagrantfile 中写好的 provision

环境安装到此结束


测试我们安装好的环境:

  • vagrant ssh ssh 进 vagrant
  • 在 mac 上的 /path-to-vagrant/vagrant 新建一个 main.js 的文件,写入以下内容:

这就是我们建立目录映射的原因,可以通过 mac 上的各种编辑器,编辑在 vagrant 中的东西

1
2
3
4
5
6
7
8
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8080);
console.log('Sever running at http://127.0.0.1:8080');
  • vagrant ssh 进入 vagrant,cd helloworld 执行 node main.js
  • 在 mac 上用浏览器查看 localhost:8080,如果有 hello world 就说明成功啦~ 可以顺利开始 node.js 的学习了

如果你只是为了学习 Node.js 大可不必像我这么折腾,直接下载 Binary 安装就可以了