rjs_converter
v1.0.0
Published
Convert r.js modules from CommonJS style to AMD style.
Downloads
2
Readme
rjs_converter
This package contains a function that takes in a require.js AMD module that uses the "CommonJS" style of requiring dependencies (an example below) and converts it into the regular AMD style.
This is handy if you perform any post-processing on built AMD modules (such as i18n extraction) and you want all the input to follow the same format.
Example CommonJS-style AMD module:
define(function(require) {
var HelloWorld = require('hello_world');
HelloWorld.greet();
});
Equivalent AMD module:
define([ 'hello_world' ], function(HelloWorld) {
HelloWorld.greet();
});
Usage
var convert = require('rjs_converter');
var fs = require('fs');
var cjsLikeContents = fs.readFileSync('path/to/amd_script.js');
var amdLikeContents = convert(cjsLikeContents);
Using as a r.js optimizer processor
The script is perfect for use in the onBuildWrite
hook that r.js provides you when running the optimizer.
var convert = require('rjs_converter');
requirejs.config({
onBuildWrite: function (moduleName, path, contents) {
return convert(contents);
}
});
Notes
The function is a NO-OP on modules that do not use the CommonJS-style. E.g, it will not modify any of the following:
// 1
define([ 'hello_world' ], function(HelloWorld) {});
// 1.1
define('my_module', [ 'hello_world' ], function(HelloWorld) {});
// 1.2
define([ 'require', 'hello_world' ], function(require, HelloWorld) {});
// 2
require([ 'hello_world' ], function(HelloWorld) {});
Also, the function makes the following assumptions when it's supposed to work. If they're not met, behavior is undefined:
- Dependencies are expected to be declared in the very beginning of the script block. Meaning, the
var x = require('x');
lines should be the first thing you write. I believe this is done by r.js automatically before passing the contents toonBuilWrite
but I didn't investigate much. - You map each dependency to a variable. Like, there should be no
require('x');
statements that do not assign the return value of the module to a variable.
Checking the output
You can use the binary rjs_convert
to test the function on a single file. The converted output will be logged to STDOUT.
npm run rjs_convert path/to/file.js
LICENSE
MIT