An AMD wrapper for Node modules
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


DefineJS is an Asynchronous Module Definition wrapper for Node. Writing modules in AMD style is convenient when code is shared between Node and a browser. The client needs to use an AMD loader like RequireJS.


Add a dependency to your project's package.json and run npm install:

    "dependencies" {
        "define": "1.0"

or install manually:

npm install define

Get Started

In your app's main script:


This will add define as a global so it's available everywhere else in the application automatically. Create AMD modules anywhere you like. They can be loaded with require or define.

See examples/shared-code for a working example web server.


  • Share code with web browsers!
  • Very lightweight integration with Node's module system.
  • No need for conditional require('define') in every AMD module.
  • Compatible with AMD Define.
  • Compatible with AMD Require.

DefineJS is Global

DefineJS installs define as a global when it's loaded. The makes define available everywhere else in the application without any special workarounds in each file.

If you don't want a global definition, do the following in your app's main script:


then, for individual modules that need define:

if (typeof define === 'undefined') {
    var define = require('define');

However, if you prefer this approach and you're using RequireJS for the client-side loader anyway, you should probably just use the similar amdefine convention because the RequireJS optimizer strips it away.

Module Ids

The AMD Spec allows module definitions to optionally specify an id. This is very helpful for transport when several modules are concatenated into the same file.

DefineJS currently accepts module ids, but ignores them. This is because it's just a very light wrapper around Node's require. Node uses a module's absolute filename as the id, so defining more than one module in a file is currently unsupported.

In practice, this doesn't matter very much. Just follow the one-module-to-one-file convention and use something like the RequireJS Optimizer for client-side code in production.

See Also

Refer to the AMD Wiki for more information about AMD.