0.96.0 • Published 4 years ago

module-library v0.96.0

Weekly downloads
485
License
ISC
Repository
github
Last release
4 years ago

Most build systems use config files to define dependencies separate from code.

module-library allows you to define your dependencies in code:

var library = require("module-library")(require)

library.define(
  "people",
  function() {
    return [{name: "erik", age: 35}, {name: "alex", age:39}, {name: "kate", age: 30}]
  }
)

library.define(
  "say-hello",
  ["people", "querystring"],
  function(people, querystring) {
    return function hi() {
      people.forEach(function(person) {
        console.log(querystring.stringify(person))
      })
    }
  }
)

library.using(
  ["say-hello"],
  function(hi) {
    hi()
  }
)

You can also export these modules so they are accessible via commonjs:

var library = require("module-library")(require)

module.exports = library.export(
  "say-hello",
  ["people", "http"],
  function(people, http) {
    ...
  }
)

Dependencies inside your module

If you want to maintain good encapsulation but only export one module, you can define as many extra modules as you like:

library.define(
  "hot-dog-stand/inventory",
  function() {
    return function stock(item) {
      if (isPerishable(item)) {}
      ...
    }
  }
)

library.define(
  "hot-dog-stand/triage",
  function() {
    return function expedite(order) {
      var lowPri = lowestDollarValueCustomer()
      order.position = lowPri.position
      lowPri.position = 1000
    }
  }
)

And then require them from the module you're exporting:

module.exports = library.export(
  "hot-dog-stand",
  ["hot-dog-stand/triage", "hot-dog-stand/inventory", ...],
  function(stock, expedite, ...) {
    openProcess(function(deliveries) {
      if (deliveries.length > 0) { stock(deliveries[0]) }
    })
    ...
  }
)

Why

  • We have an explicit reference, in software, of which dependencies are needed for a piece of code. This makes it easy to load that code in other places, like in the browser (see bridge-module), without any kind of elaborate, declarative, filesystem-based, side-effect ridden build process.

  • We can pause and debug any part of the module loading process in the same process as our app

  • We will (later on) be able to hot reload modules without refreshing the whole tree

0.96.0

4 years ago

0.95.0

6 years ago

0.94.0

6 years ago

0.93.0

7 years ago

0.92.0

7 years ago

0.91.0

7 years ago

0.90.0

7 years ago

0.89.0

7 years ago

0.88.0

7 years ago

0.87.0

7 years ago

0.86.0

7 years ago

0.85.0

7 years ago

0.84.0

7 years ago

0.83.0

7 years ago

0.82.0

7 years ago

0.81.0

7 years ago

0.80.0

7 years ago

0.79.0

8 years ago

0.78.0

8 years ago

0.77.0

8 years ago

0.76.0

8 years ago

0.75.0

8 years ago

0.74.0

8 years ago

0.73.0

8 years ago

0.72.0

8 years ago

0.71.0

8 years ago

0.70.0

8 years ago

0.69.0

8 years ago

0.68.0

8 years ago

0.67.0

8 years ago

0.66.0

8 years ago

0.65.0

8 years ago

0.64.0

8 years ago

0.63.0

8 years ago

0.62.0

8 years ago

0.61.0

8 years ago

0.60.0

8 years ago

0.59.0

8 years ago

0.58.0

9 years ago

0.57.0

9 years ago