!!?!?
What is this thing we're actually talking about?
If your module is 12GB, takes 2 hours to compile, or includes a copy
of WebKit or Chromium in it, then perhaps it's bigger than what you
should be installing using npm. Also, 12GB of source is certainly
nowhere near a 12GB gzipped tarball. In fact, your 300MB binaries are
very likely harder to compress. (There are exceptions, of course.
Maybe the repository contains a file with 12GB of /dev/random which
the compiler ignores.)
But anyway, it could be that's a large project, not a node module.
Deploy it the old fashioned way, like node does, by putting tarballs
on a website and building binaries for architectures where it is
reasonable to do so.
It's suboptimal, but it's sometimes quite reasonable to say, "You have
to download and install xyz to use this module". Maybe you could just
have people install webkit themselves, and write your little binding
as a thing that talks to it. The 'redis' module doesn't install redis
for you. The libmysql module doesn't install mysql. You wouldn't
expect a rubygems or cpan module to install Chrome.
Think of your users' experience. It's not just the install-time
experience. They're actually going to *use* this thing, right? A
module that ships as a binary is virtually impossible to debug. A
module that ships as 12GB of code is probably just as bad, if not
worse. That's an application. Treat it like one.