I have very similar module - https://github.com/sidorares/hot-module-replacement
The only difference is that I'm trying to use same API as webpack where possible - `module.hot.accept`, `module.hot.decline`, `dispose/addDisposeHandler` - https://webpack.github.io/docs/hot-module-replacement.html Other than similar api there is no dependency on webpack, it's just fs.watch + resolution of affected modules subgraph and triggering of registered hooks Also happy to hear feedback! On Monday, 31 July 2017 05:57:54 UTC+10, Jason Zheng wrote: > > > I have built a hot-reload plugin named 'dload' for node.js ,everything > looks fine .(project is here : https://github.com/yyrdl/dload ) > > But I am not sure if it's ok for production,could somebody give any > suggestions ? > > > Ideas : > > Hot-reload means reload module when it is running , what's need to solve > is : > > * reload new module , and update it globally > * release the old module and the resource that is created by the module. > > > > If I know all the reference of target module ,then I can update the > module globally. > > related code in `dload`: > > ```js > > const monitors={};const newMonitor = funtion(tag){ > var mon={}; > monitors[tag]=mon; > return mon;} > exports.new = newMonitor; > > ``` > and useage: > > ```js > > const dload =require("dload"); > const mo = dload.new();// `newMonitor` return an empty Object at first > ,What's important is that the object is also hold by `dload`. > > mo.test_module = require("./test_module.js");//load target module,and assign > to the empty Object 'mo' > //suppose there is a method 'say' ,just invoke it > mo.test_module.say(); > > > ``` > > Suppose something changed in `./test_module.js` ,we need to reload it . > All we need to do is just remove the reference of old module in > `require.cache` and `mo` ,and require target module again, at final, assign > new module to `mo`. Because `mo` is also hold by `dload ` ,so it's a easy > thing. > > PS:Be careful with the resource created by the old module, like a > connection pool or other else . > > > > There are four test cases in > https://github.com/yyrdl/dload/tree/master/example : > > * `test_update_and_memory.js` : test if it will update target module > successfully ,and if it will cause memory leak. > > * `test_multi_rely.js` : test if there is impact when reload a module > which will no longer use `module1` which is also used by other modules > > * `test_module_with_status.js` test module with status ,such as an > counter > > * 'test_server.js' will start a simple http server powered by express , > and the only router `./server/router.js` will be changed and reload for > many times. At the same time ,it will start many request at the same time > to check if the reloading is work . And use another module `easy-monitor` > to check if there is a memory leak . > > > Suggestions Wanted ! ^_^ > > > > > > > > -- Job board: http://jobs.nodejs.org/ New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/53d8783d-dbf2-4046-9372-75a7ec67776d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
