---
layout: post
title: 使NodeJs的require能够加载变更后的模块
tagline: ""
category: null
tags: []
published: true
---
起因是这样子的，我打算做个工具，需要能够动态加载外部的模块，由于是跑起来需要比较长时间运行，所以需要能监测文件变更，一旦模块文件改动了就自动重新加载，网上流传的绝大部分心法都是监测文件变动后就重启一遍了事，这类天魔解体似的功法过于霸道，写起来麻烦，动辄涉及进程线程什么的大招，简便点的就是借助外物，比如node superviso之类的要全局安装的依赖，对于一个功能代码一百来行的小工具来说太过于霸道了，所以细查了node的文档后找到了一个比较简单的方法。

require模块有一个cache属性，动态加载的瓶颈就在这里，监测文件变更很easy，但是重复执行require模块得到的只能是第一次加载的内容，盖因为require模块把加载的外部模块都缓存在了cahce这个属性里。所以我们要作的事情就很简单了，cache是一个对象，我们只需要遍历这个对象的属性然后判断那些属性对应的模块变更过，就删掉这个属性，然后重新用require加载一边就ok了。

只是个小技巧，不用其他高深的功法，代码在 [传送阵：点击进入](https://github.com/ipconfiger/node-mockit "node-mockit")
也就是前两天晚上写的小工具
Update by gitblog.io at 2014年5月11日 下午1:58:41
Update by gitblog.io at 2014年5月11日 下午1:58:41