1 |
|
2 | var path = require('path');
|
3 |
|
4 | var rollup = require('rollup');
|
5 | var babel = require('rollup-plugin-babel');
|
6 | var json = require('rollup-plugin-json');
|
7 | var localResolve = require('rollup-plugin-local-resolve');
|
8 | var camelCase = require('camel-case');
|
9 | var objectAssign = require('object-assign');
|
10 |
|
11 | var Promise = (typeof Promise === 'undefined') ? require('pinkie-promise') : Promise;
|
12 |
|
13 | module.exports = function rollupLib(options) {
|
14 | var rollupOptions = objectAssign({}, options);
|
15 | var babelOptions;
|
16 |
|
17 | var baseConfig = {};
|
18 | var builds = [];
|
19 |
|
20 | rollupOptions.name = rollupOptions.name || 'mylibrary';
|
21 | rollupOptions.moduleName = rollupOptions.moduleName || camelCase(rollupOptions.name);
|
22 | rollupOptions.dest = rollupOptions.dest || 'dist';
|
23 | rollupOptions.entry = rollupOptions.entry || 'index.js';
|
24 | rollupOptions.format = rollupOptions.format || ['es6', 'cjs', 'umd'];
|
25 | rollupOptions.babel = rollupOptions.babel || 'inherit';
|
26 |
|
27 | babelOptions = (rollupOptions.babel === 'inherit') ? void 0 : rollupOptions.babel;
|
28 |
|
29 | if (babelOptions && babelOptions.presets) {
|
30 | babelOptions.presets = babelOptions.presets.map(function mapPreset(preset) {
|
31 | return require('babel-preset-' + preset);
|
32 | });
|
33 | }
|
34 |
|
35 | if (babelOptions && babelOptions.plugins) {
|
36 | babelOptions.plugins = babelOptions.plugins.map(function mapPlugin(plugin) {
|
37 | return require('babel-plugin-' + plugin);
|
38 | });
|
39 | }
|
40 |
|
41 | if (rollupOptions.format.length === 0) {
|
42 | rollupOptions.format = ['es6', 'cjs', 'umd'];
|
43 | }
|
44 |
|
45 | rollupOptions.plugins = rollupOptions.plugins || [babel(babelOptions), json(), localResolve()];
|
46 |
|
47 | baseConfig = {
|
48 | entry: rollupOptions.entry,
|
49 | plugins: rollupOptions.plugins
|
50 | };
|
51 |
|
52 | builds = rollupOptions.format.map(function buildFormat(format) {
|
53 | var startTime = Date.now();
|
54 | var config = objectAssign({}, baseConfig);
|
55 |
|
56 | config.format = format;
|
57 | config.dest = path.join(rollupOptions.dest, rollupOptions.name);
|
58 |
|
59 | if (format === 'es6') {
|
60 | config.dest += '.es2015';
|
61 | }
|
62 |
|
63 | if (format === 'umd') {
|
64 | config.dest += '.umd';
|
65 | config.moduleName = rollupOptions.moduleName;
|
66 | }
|
67 |
|
68 | if (format === 'iife') {
|
69 | config.dest += '.iife';
|
70 | config.moduleName = rollupOptions.moduleName;
|
71 | }
|
72 |
|
73 | config.dest += '.js';
|
74 |
|
75 | return rollup.rollup(config).then(function rollupBundle(bundle) {
|
76 | var endTime = 0;
|
77 |
|
78 | bundle.write(config);
|
79 |
|
80 | endTime = Date.now();
|
81 |
|
82 | return {
|
83 | format: format,
|
84 | name: rollupOptions.name,
|
85 | startTime: startTime,
|
86 | endTime: endTime
|
87 | };
|
88 | });
|
89 | });
|
90 |
|
91 | return Promise.all(builds);
|
92 | };
|