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.