在国内开发nodejs以及前端可能需要知道的一些东西.md

@#$SDFG$DEW#E@!EXWT#ߥ®™∞¡¥

  • github无法访问下不了
  • node.js环境搭建好慢
  • npm慢死
  • bower慢
  • BLABLABLA……

node.js环境快速搭建管理

直接从 github clone nvm 到本地, 这里假设大家都使用 ~/git 目录存放 git 项目:

1
2
$ cd ~/git
$ git clone https://github.com/creationix/nvm.git

配置终端启动时自动执行 source ~/git/nvm/nvm.sh,
在 ~/.bashrc, ~/.bash_profile, ~/.profile, 或者 ~/.zshrc 文件添加以下命令:

1
$ source ~/git/nvm/nvm.sh

nvm 默认是从 http://nodejs.org/dist/ 下载的, 国外服务器, 必然很慢,
好在 nvm 以及支持从镜像服务器下载包, 于是我们可以方便地从七牛的 node dist 镜像下载:

1
$ NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/dist nvm install 0.11.11

于是你就会看到一段非常快速进度条:

1
2
######################################################################## 100.0%
Now using node v0.11.11

如果你不想每次都输入环境变量 NVM_NODEJS_ORG_MIRROR, 那么我建议你加入到 .bashrc 文件中:

1
2
3
# nvm
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/dist
source ~/git/nvm/nvm.sh

nvm 的具体使用我在这里就不多说了,其他人讲的挺多了,官网也很详尽,或者直接nvm回车查看帮助

使用镜像或者cnpm加速npm

同理 nvm , npm 默认是从国外的源获取和下载包信息, 不慢才奇怪.
可以通过简单的 ---registry 参数, 使用国内的镜像 https://registry.npm.taobao.org :

1
$ npm --registry=https://registry.npm.taobao.org install nrm

当然, 每次都要输入那么长串的 registry url 的话, 实在太麻烦, 可以使用 nrm 这个模块来切换镜像:

1
2
3
4
5
$ nrm ls
// 对比各个镜像的访问速度
$ nrm test
// 使用淘宝的镜像
$ nrm use taobao

但是毕竟镜像跟官方的 npm 源还是会有一个同步时间差异, 目前 cnpm 的默认同步时间间隔是 15 分钟.
如果你是模块发布者, 或者你想马上同步一个模块, 那么推荐你安装 cnpm cli:

1
npm install cnpm -g

通过 cnpm 命令行, 你可以快速同步任意模块:

1
$ cnpm sync koa connect mocha

呃, 我就是不想安装 cnpm cli 怎么办? 哈哈, 早就想到你会这么懒了, 于是我们还有一个 web 页面:

例如我想马上同步 koa, 直接打开浏览器: https://npm.taobao.org/sync/koa

或者你是命令行控, 通过 open 命令打开:

1
$ open https://npm.taobao.org/sync/koa

如果你安装的模块依赖了 C++ 模块, 需要编译, 肯定会通过 node-gyp 来编译,

node-gyp 在第一次编译的时候, 需要依赖 node 源代码, 于是又会去 node dist 下载,

于是大家又会吐槽, 怎么 npm 安装这么慢…

好吧, 于是又要提到 —disturl 参数, 通过七牛的镜像来下载:

1
$ npm --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist install microtime

再次要提到 cnpm cli, 它已经默认将 —registry 和 —disturl 都配置好了, 用了就知道了.

GitHub好慢啊

好了, 看到这里大家应该对 node 和 npm 已经没有速度慢的问题了.

github 慢, 或者说是它的资源 host 被堵而已, 大家可以通过简单的 hosts 映射解决:

185.31.16.184 github.global.ssl.fastly.net

国内taobao镜像列表

bower添加代理

修改 .bowerrc 文件(如无则新增):

1
2
3
4
{
"proxy": "http://hx.gy:1080",
"https-proxy": "http://hx.gy:1080"
}

代理

你懂的能访问就好,不懂多搜就懂

尝鲜mongodb3.0.4

修改最大进程数

1
2
3
4
vim /etc/security/limits.d/90-nproc.conf
* soft nproc unlimited
vim /etc/security/limits.conf
* soft nproc unlimited

??

1
2
3
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
ulimit -u 32768

为了使重启以后生效将以上3条追加到/etc/rc.local中

未完待续…

Hasha:友好的加密API

不知道你是不是nodejs加密模块的粉丝,就像其他模块一样crypto足够底层但是抽象不足。每当我们要快速
使用MD5和SHA加密一些东西时又会感到要做太多的工作。而且对初学者而言很难解释。

Sindre Sorhus 写了个模块叫做
hasha(GitHub: sindresorhus/hasha, License: MIT, npm: hasha) 看代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// string
var hasha = require('hasha');

hasha('unicorn');
//=> 'e233b19aabc7d5e53826fb734d1222f1f0444c3a3fc67ff4af370a66e7cadd2cb24009f1bc86f0bed12ca5fcb226145ad10fc5f650f6ef0959f8aadc5a594b27'

// hash the proccess input and output the hash sum
process.stdin.pipe(hasha.stream()).pipe(process.stdout);

// get the MD5 hash of an image
hasha.fromFile('unicorn.png', {algorithm: 'md5'}, function (err, hash) {
console.log(hash);
//=> '1abcb33beeb811dca15f0ac3e47b88d9'
});

阿里云挂载磁盘备忘

默认情况下,阿里云新购的磁盘是不会自动mount到ECS上的。

网上许多教程介绍了,我减去了其中分区步骤归纳如下,有更好方案的童鞋请和我说。

查看当前状态

如果使用fdisk -l查看存在数据盘,但是df -h不存在的话需要格式化数据盘并且装载数据盘。

格式化数据盘

1
$ mkfs.ext4 /dev/xvdb

装载数据盘

假设装载在文件夹/data

1
2
3
$ mount /dev/xvdb /data       //装载
$ mv /oldfile /data/ //移动已有数据
$ ln -s /data/oldfile /oldfile //软连接新旧文件

添加开机挂载

编辑启动 vim /etc/fstab 追加行
/dev/xvdb /data ext4 defaults 0 0

检查挂载

1
$ df -h