Author your library in ES6 modules and distribute in everything under the sun:
- cjs
- amd
- amd, named & concatenated
- globals, concatenated
$ npm install broccoli-dist-es6-module
// give it a tree and some options:
makeModules('broccoli-dist-es6-module')(tree, {
main: 'index',
global: 'MyLib',
packageName: 'my-lib',
shim: {
'jquery': 'jQuery'
}
});
Sample Brocfile.js
:
var makeModules = require('../../index');
module.exports = function(broccoli) {
// make a tree from your source files
var src = broccoli.makeTree('lib');
return makeModules(tree, {
// the entry script, and module that becomes the global
main: 'index',
// will become window.MyLib with the exports from `main`
global: 'MyLib',
// the prefix for named-amd modules
packageName: 'my-lib',
// global output only: naive shimming, when the id 'jquery' is imported,
// substitute with `window.jQuery` instead
shim: {
'jquery': 'jQuery'
}
});
};
And then run broccoli:
$ broccoli build dist
Open up dist
to see the results.
-
main
- the entry script to your package, determines which module exports to your global namespace, also the package that is returned in AMD withrequire(['your-package-name'])
-
packageName
- named-amd, the name of your packagerequire(['your-package-name'])
; -
global
- globals: the global to attach yourmain
module to -
shim
- globals: map import string ids to objects onwindow
, see usage above or the examples
-
This uses the
compatFix
option of the es6-module-transpiler which is not necessarily future proof (but without it we couldn'timport jQuery from 'jquery'
). -
The shimming is really hacky, but its working.