hash-for-dep
Generate a hash representing the stats of this module files and all its descendents files.
var hashForDep = require('hash-for-dep');
hashForDep('rsvp');
hashForDep('rsvp', 'path/to/other/project');
What does Hash For Dep consider a dependency?
HashForDep respects the node resolution algorithim.
For example given:
foo/package.json
foo/index.js
foo/node_modules/a/
foo/node_modules/a/package.json
foo/node_modules/a/index.js
foo/node_modules/a/node_modules/b
foo/node_modules/a/node_modules/b/package.json
foo/node_modules/a/node_modules/b/index.js
foo/node_modules/a/node_modules/f
foo/node_modules/a/node_modules/f/index.js
foo/node_modules/a/node_modules/f/package.json
foo/node_modules/c
foo/node_modules/c/index.js
foo/node_modules/c/package.json
foo/node_modules/d
foo/node_modules/d/index.js
foo/node_modules/d/package.js
where foo/package.json
depends on a
and c
but not d
and foo/node_modules/a/package.json
depends on b
not f
HashForDep will consider: a
c
b
as dependencies, and simply ignore d
and f
.
When HashForDep considers a dependency, it will stat each of its files and those of its dependencies.
Cache
NOTE: By default, these hashes are cached for the life of the process. As this
is the same strategy node uses for require(x)
we can safely follow suit.
That being said, some scenarios may exist where this is not wanted. So just
like require._cache
exists, we provide the following options:
To evict the cache manually (maybe for testing)
require('hash-for-dep')._resetCache();
To opt out of the cache on a per invocation basis
var hashForDep = require('hash-for-dep');
hashForDep(name, path, null, false );