Skip to content

Instantly share code, notes, and snippets.

@kimjoar
Last active December 16, 2015 19:51
Show Gist options
  • Save kimjoar/5488447 to your computer and use it in GitHub Desktop.
Save kimjoar/5488447 to your computer and use it in GitHub Desktop.
Transform Require.js modules to use simplified CommonJS wrapper

Transform your code from:

define(['backbone', './model', './mySync'], function(Backbone, Model, mySync) {

    var Collection = Backbone.Collection.extend({

        model: Model,
        sync: mySync

    });

    return Collection;

});

to using the simplified CommonJS wrapper:

define(function(require) {

    var Backbone = require('backbone');
    var Model = require('./model');
    var mySync = require('./mySync');

    var Collection = Backbone.Collection.extend({

        model: Model,
        sync: mySync

    });

    return Collection;

});
var _ = require('underscore');
var fs = require('fs');
var glob = require('glob');
var jsFiles = glob.sync('./src/main/webapp/javascript/**/*.js');
_.each(jsFiles, function(file) {
var content = fs.readFileSync(file, 'utf8');
var match = content.match(/define\(\s*\[([^\]]+)\s*\],\s*function\s*\(([^\)]+)\)\s*{/);
if (!match) return;
echo(file);
var deps = match[1].split(',');
var funcs = match[2].split(',');
var indent = ' ';
var cjsRequire = "define(function(require) {\n\n" + indent;
var requires = _.map(deps, function(dep, i) {
var func = funcs[i];
var depRequire = 'require(' + dep.trim() + ');';
if (func) {
return 'var ' + func.trim() + ' = ' + depRequire;
} else {
return depRequire;
}
});
var newRequire = cjsRequire + requires.join("\n" + indent);
fs.writeFileSync(file, content.replace(match[0], newRequire), 'utf8');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment