Asynchronous node module dependency tree walking framework
JavaScript
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
test
.gitignore
.travis.yml
Readme.md
index.js
package.json

Readme.md

prod

Asynchronous node module dependency tree walking framework.

Build Status

Easily perform a kitchen sink of asynchronous operations on each item in a module's dependency tree.

Example

Put individual names and versions of all dependencies in some db by walking over the tree using an async .map:

var prod = require('prod')
var moduleRoot = path.dirname(require.resolve('tape'))

prod(moduleRoot).map(function (dep, next) {
  db.put(dep.name + '@' + dep.version, next)
}, function(err, deps) {
  if (err) throw err
  console.log(deps)
  // => [
  // 'tape@2.0.0',
  // 'jsonify@0.0.0',
  // 'deep-equal@0.1.0',
  // 'defined@0.0.0',
  // 'through@2.3.4'
  // ]
  })
})

API

// pass any module's root directory to walk over it and it's dependencies
var tapeDependencies = prod(path.dirname(require.resolve('tape')))

var myDependencies = prod() // defaults to process.cwd()

Object.keys(myDependencies) // => // each, eachSeries, eachLimit, map, ...etc.
// See below.

prod uses timoxley/async-mixin, so you automatically have access to the following methods from caolin/async while iterating over your dependency tree:

  • each
  • eachSeries
  • eachLimit
  • map
  • mapSeries
  • mapLimit
  • filter
  • filterSeries
  • reject
  • rejectSeries
  • reduce
  • reduceRight
  • detect
  • detectSeries
  • sortBy
  • some
  • every
  • concat
  • concatSeries

If you don't want any of this async magic, you can simply initialize prod with .load and use regular Array operations on its .dependencies

var myDependencies = prod().load(function(err, dependencies) {
  if (err) throw err

  console.log(dependencies === myDependencies.dependencies) // => true

  // regular ES5 Array methods
  dependencies.map(function(dep) {
    return dep.name
  })
})

Alternatively, you could try using read-installed with traverse

License

MIT