Unloading a module from require

1,413 views
Skip to first unread message

Andrew Finnell

unread,
Jun 13, 2012, 3:40:55 PM6/13/12
to nod...@googlegroups.com
I did some research in the group and it appears someone had a similar question about unloading modules that were loaded with require.

Am I correct in reading that the use of nodules would allow me to require('./module1') then dump the entire contents of that module programmaticly at a later time? Then reload it if I felt like it, all within the same node process.

It seems I could build a simple app server with dynamic modules can be done like so:

I have this working pretty well except for the unloading piece. Is this possible or do I have to find a mechanism to bounce the nodes?


var loadedModules = {};

on('load', function(moduleName) {
   var module = require(moduleName);
   module.start();
   loadedModules[ moduleName ] = module;
});

on('unload', function(moduleName) {
     // unload here..     
});

I completely realize that I am oversimplifying so I am hoping to get straightened out.

darcy

unread,
Jun 13, 2012, 10:40:22 PM6/13/12
to nod...@googlegroups.com
delete require.cache[the_absolute path_of_module];
 
is it what you want?

yogesh agrawal

unread,
Jun 14, 2012, 3:02:45 AM6/14/12
to nod...@googlegroups.com
delete require.cache is not good way to unload.

Some times module doesn't get unloaded after deleting it from cache. Modules api lacks unload method :(

On Thu, Jun 14, 2012 at 11:28 AM, Ben <thebu...@gmail.com> wrote:
I'm interested in this question too. I tried it once, but all the async operations started by the modules remained active even after "unloading" it. Try for example a simple setInterval() that writes something to the log every second, in the module - when you unload the module, the timer is still running.

Is there a better way to do it?



On Wednesday, June 13, 2012 4:40:55 PM UTC-3, Andrew Finnell wrote:
I did some research in the group and it appears someone had a similar question about unloading modules that were loaded with require.

Am I correct in reading that the use of nodules would allow me to require('./module1') then dump the entire contents of that module programmaticly at a later time? Then reload it if I felt like it, all within the same node process.

--
Job Board: http://jobs.nodejs.org/
Posting guidelines: 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 post to this group, send email to nod...@googlegroups.com
To unsubscribe from this group, send email to
nodejs+un...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en



--
Yogesh Agrawal
+91-9351507770

Dan Milon

unread,
Jun 14, 2012, 4:12:20 AM6/14/12
to nod...@googlegroups.com
What is the use case of unloading a module?
> <mailto:nod...@googlegroups.com>
> To unsubscribe from this group, send email to
> nodejs+un...@googlegroups.com
> <mailto:nodejs%2Bunsu...@googlegroups.com>

rubyonrailsx

unread,
Jun 14, 2012, 3:08:21 AM6/14/12
to nod...@googlegroups.com
Does this mean NodeJs can change its code on-the-fly?

-- 
rubyonrailsx
Sent with Sparrow

Matt

unread,
Jun 14, 2012, 9:45:03 AM6/14/12
to nod...@googlegroups.com
Of course it does. It's a dynamic language. You can redefine any function at any time.

mgutz

unread,
Jun 14, 2012, 11:18:01 AM6/14/12
to nod...@googlegroups.com
In our case, our xml builder like templates are javascript modules loaded via require. Templates in development mode should not be cached. `delete require.cache` works for us.

>     <mailto:nodejs@googlegroups.com>
>     To unsubscribe from this group, send email to
>     For more options, visit this group at
>     http://groups.google.com/group/nodejs?hl=en?hl=en
>
>
>
>
> --
> Yogesh Agrawal
> +91-9351507770
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> 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 post to this group, send email to nod...@googlegroups.com
> To unsubscribe from this group, send email to

Dominic Tarr

unread,
Jun 15, 2012, 10:42:40 AM6/15/12
to nod...@googlegroups.com
what you _could_ do, is instrument the code by parsing and inserting
additional calls.
with this technique you can add counters that make it safe to run
untrusted code.

so you can prevent things like: while (true);

which would loop forever. you could also use this technique to abort
any io operation,
and to clearTimeout etc.

of course, most people are not crazy enough to pull something like this off.

you need to be a bit of a mad scientist.

like substack!
https://github.com/substack/node-falafel
https://github.com/substack/node-stackedy
>> >     <mailto:nod...@googlegroups.com>
>> >     To unsubscribe from this group, send email to
>> >     nodejs+un...@googlegroups.com
>> >     <mailto:nodejs%2Bunsu...@googlegroups.com>
>> >     For more options, visit this group at
>> >     http://groups.google.com/group/nodejs?hl=en?hl=en
>> >
>> >
>> >
>> >
>> > --
>> > Yogesh Agrawal
>> > +91-9351507770
>> > --
>> > Job Board: http://jobs.nodejs.org/
>> > Posting guidelines:
>> > 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 post to this group, send email to nod...@googlegroups.com
>> > To unsubscribe from this group, send email to
>> > nodejs+un...@googlegroups.com
>> > For more options, visit this group at
>> > http://groups.google.com/group/nodejs?hl=en?hl=en
>>
>>
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> 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 post to this group, send email to nod...@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+un...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages