rjs_converter

1.0.0 • Public • Published

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 to onBuilWrite 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

Readme

Keywords

Package Sidebar

Install

npm i rjs_converter

Weekly Downloads

0

Version

1.0.0

License

none

Last publish

Collaborators

  • amireh