diff --git a/lib/commands/compile.js b/lib/commands/compile.js index 6e5fcf7..c616f37 100644 --- a/lib/commands/compile.js +++ b/lib/commands/compile.js @@ -159,8 +159,9 @@ exports.compile = function (opt, callback) { } var configfile = path.resolve(opt.pkgdir, 'require.config'); + var requireCfg = require(configfile); - var packages = require(configfile).packages; + var packages = requireCfg.packages; var pkgnames = packages.map(function (p) { return p.name; }); @@ -216,7 +217,7 @@ exports.compile = function (opt, callback) { optimize: 'uglify', include: includes, out: opt.output, - paths: {requireLib: impl} + paths: _.extend({requireLib: impl}, requireCfg.paths || {}) }; if (opt.verbose) { config.logLevel = 0; diff --git a/lib/project.js b/lib/project.js index 73e1220..1be7cd3 100644 --- a/lib/project.js +++ b/lib/project.js @@ -156,6 +156,7 @@ exports.updateRequireConfig = function (package_dir, baseurl, /*opt*/rcfg, callb var packages = []; var shims = {}; + var rconfig = {}; var basedir = baseurl ? path.relative(baseurl, package_dir): package_dir; var dir = basedir.split(path.sep).map(encodeURIComponent).join('/'); @@ -216,46 +217,53 @@ exports.updateRequireConfig = function (package_dir, baseurl, /*opt*/rcfg, callb return callback(err); } - var data = { + exports.readPackageJSON( path.resolve( '.', 'package.json' ), function ( err, packageConfig, p ) { + if ( packageConfig.jam && packageConfig.jam.rconfig ) { + rconfig = packageConfig.jam.rconfig; + } + + var data = _.extend( rconfig, { // TODO: useful option for cache-busting //urlArgs: '_jam_build=' + (new Date().getTime()), - packages: packages, - version: version, - shim: shims - } + packages : packages, + version : version, + shim : shims + } ); - // now bring in other require.config.js options to make available - // earlier versions had variable substitution that breaks on r.js compilation - // now there is duplication - however, the original jam has been left untouched. - var cfg = _.clone(rcfg); - cfg.packages = _.union(rcfg.packages || [], packages); - cfg.shim = _.extend({}, rcfg.shim || {}, shims); + // now bring in other require.config.js options to make available + // earlier versions had variable substitution that breaks on r.js compilation + // now there is duplication - however, the original jam has been left untouched. + var cfg = _.clone(rcfg); + cfg = _.extend( cfg, rconfig || {} ); + cfg.packages = _.union(rcfg.packages || [], packages); + cfg.shim = _.extend({}, rcfg.shim || {}, shims); var configStr = JSON.stringify(cfg, null, 4); - var src = 'var jam = ' + JSON.stringify(data, null, 4) + ';\n' + - '\n' + - 'if (typeof require !== "undefined" && require.config) {\n' + - ' require.config(' + configStr + ');\n' + - '}\n' + - 'else {\n' + - ' var require = ' + configStr + ';\n' + - '}\n' + - '\n' + - 'if (typeof exports !== "undefined" && ' + - 'typeof module !== "undefined") {\n' + - ' module.exports = jam;\n' + - '}'; - - var filename = path.resolve(package_dir, 'require.config.js'); - mkdirp(package_dir, function (err) { - if (err) { - return callback(err); - } - logger.info('updating', path.relative(process.cwd(), filename)); - async.parallel([ - async.apply(fs.writeFile, filename, src), - async.apply(exports.makeRequireJS, package_dir, src) - ], callback); + var src = 'var jam = ' + JSON.stringify(data, null, 4) + ';\n' + + '\n' + + 'if (typeof require !== "undefined" && require.config) {\n' + + ' require.config(' + configStr + ');\n' + + '}\n' + + 'else {\n' + + ' var require = ' + configStr + ';\n' + + '}\n' + + '\n' + + 'if (typeof exports !== "undefined" && ' + + 'typeof module !== "undefined") {\n' + + ' module.exports = jam;\n' + + '}'; + + var filename = path.resolve(package_dir, 'require.config.js'); + mkdirp(package_dir, function (err) { + if (err) { + return callback(err); + } + logger.info('updating', path.relative(process.cwd(), filename)); + async.parallel([ + async.apply(fs.writeFile, filename, src), + async.apply(exports.makeRequireJS, package_dir, src) + ], callback); + }); }); }); });