define

An AMD wrapper for Node modules

npm install define
7 downloads in the last week
94 downloads in the last month

DefineJS

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.

Installation

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:

require('define');

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.

Features

  • 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:

require('define').noConflict();

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.

npm loves you