1 | #!/usr/bin/env node
|
2 |
|
3 | var fs = require('fs');
|
4 |
|
5 | var program = require('commander');
|
6 |
|
7 | var path = require('path');
|
8 | var pkg = require('../package.json');
|
9 | var rollupBabelLibBundler = require('../lib');
|
10 |
|
11 | var libPkg = null;
|
12 | var libName = '';
|
13 | var moduleName = '';
|
14 | var dest = '';
|
15 | var format = '';
|
16 | var postfix = '';
|
17 | var entry = '';
|
18 | var files = [];
|
19 | var packageConfig = {};
|
20 | var babelOptions = null;
|
21 | var dependencies = [];
|
22 | var bundleDependencies = [];
|
23 | var externals = [];
|
24 |
|
25 | var packageFile = path.resolve(process.cwd(), './package.json');
|
26 |
|
27 | var stats = (function statsIIFE() {
|
28 | try {
|
29 | return fs.statSync(packageFile);
|
30 | } catch (e) {
|
31 | return null;
|
32 | }
|
33 | })();
|
34 |
|
35 | if (stats && stats.isFile()) {
|
36 | libPkg = require(packageFile);
|
37 | libName = libPkg.name;
|
38 | packageConfig = libPkg.rollupBabelLibBundler || {};
|
39 |
|
40 | dependencies = libPkg.dependencies || {};
|
41 | bundleDependencies = libPkg.bundleDependencies || [];
|
42 |
|
43 | externals = Object.keys(dependencies).filter(function filter(item) {
|
44 | return bundleDependencies.indexOf(item) < 0;
|
45 | });
|
46 | }
|
47 |
|
48 | program.version(pkg.version)
|
49 | .usage('[options] <file ...>')
|
50 | .option('-n, --lib-name <libName>',
|
51 | 'Library name (defaults to `name` from `package.json` if available)')
|
52 | .option('--module-name <moduleName>', 'Module name for UMD build')
|
53 | .option('-f, --format <format>', 'Build formats (comma separated; default: es6,umd,cjs)')
|
54 | .option('-p --postfix <postfix>',
|
55 | 'Postfix names (comma separated; default: es2015:.es6,umd:.umd,cjs:,iife:.iife)')
|
56 | .option('-d, --dest <dest>', 'Destination')
|
57 | .parse(process.argv);
|
58 |
|
59 | libName = program.libName || libName || 'library';
|
60 | moduleName = program.moduleName || packageConfig.moduleName || moduleName;
|
61 | format = program.format || packageConfig.format || format;
|
62 | postfix = program.postfix || packageConfig.postfix || postfix;
|
63 | dest = program.dest || packageConfig.dest || dest;
|
64 | babelOptions = packageConfig.babel || babelOptions;
|
65 |
|
66 | files = program.args || packageConfig.files || [];
|
67 | if (files.length === 0) {
|
68 | files = [entry];
|
69 | }
|
70 |
|
71 | if (files.length > 0) {
|
72 | files.forEach(function forEach(arg) {
|
73 | var bundleFormat = (function (f) {
|
74 | if (!f) {
|
75 | return void 0;
|
76 | }
|
77 |
|
78 | if (typeof f === 'string') {
|
79 | return f.split(',');
|
80 | }
|
81 |
|
82 | return format;
|
83 | })(format);
|
84 |
|
85 | var bundlePostfix = (function (p) {
|
86 | if (!p) {
|
87 | return void 0;
|
88 | }
|
89 |
|
90 | if (typeof p === 'string') {
|
91 | return p.split(',').reduce(function (prev, cur) {
|
92 | var keyVal = cur.split(':');
|
93 | prev[keyVal[0]] = keyVal[1];
|
94 | return prev;
|
95 | }, {});
|
96 | }
|
97 |
|
98 | return p;
|
99 | }(postfix));
|
100 |
|
101 | rollupBabelLibBundler({
|
102 | name: libName,
|
103 | moduleName: moduleName,
|
104 | dest: dest,
|
105 | entry: arg,
|
106 | format: bundleFormat,
|
107 | postfix: bundlePostfix,
|
108 | babel: babelOptions,
|
109 | externals: externals
|
110 | }).then(function buildThen(builds) {
|
111 | console.log('All done!');
|
112 |
|
113 | builds.forEach(function buildForEach(buildStats) {
|
114 | var moduleFormat = buildStats.format.toUpperCase();
|
115 | var buildName = buildStats.name;
|
116 | var duration = buildStats.endTime - buildStats.startTime;
|
117 |
|
118 |
|
119 | var o = 'Built ' + moduleFormat + ' module for ' + buildName + '. Took ' + duration + ' ms';
|
120 |
|
121 | console.log(o);
|
122 | });
|
123 | }).catch(function buildCatch(err) {
|
124 | console.log('Error while generating a build:');
|
125 |
|
126 | if (err.stack) {
|
127 | console.error(err.stack);
|
128 | } else {
|
129 | if (err.message) {
|
130 | console.error(err.message);
|
131 | }
|
132 | }
|
133 |
|
134 | process.exit(1);
|
135 | });
|
136 | });
|
137 | } else {
|
138 | console.log('No files specified');
|
139 | }
|