UNPKG

3.66 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3var fs = require('fs');
4
5var program = require('commander');
6
7var path = require('path');
8var pkg = require('../package.json');
9var rollupBabelLibBundler = require('../lib');
10
11var libPkg = null;
12var libName = '';
13var moduleName = '';
14var dest = '';
15var format = '';
16var postfix = '';
17var entry = '';
18var files = [];
19var packageConfig = {};
20var babelOptions = null;
21var dependencies = [];
22var bundleDependencies = [];
23var externals = [];
24
25var packageFile = path.resolve(process.cwd(), './package.json');
26
27var stats = (function statsIIFE() {
28 try {
29 return fs.statSync(packageFile);
30 } catch (e) {
31 return null;
32 }
33})();
34
35if (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
48program.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
59libName = program.libName || libName || 'library';
60moduleName = program.moduleName || packageConfig.moduleName || moduleName;
61format = program.format || packageConfig.format || format;
62postfix = program.postfix || packageConfig.postfix || postfix;
63dest = program.dest || packageConfig.dest || dest;
64babelOptions = packageConfig.babel || babelOptions;
65
66files = program.args || packageConfig.files || [];
67if (files.length === 0) {
68 files = [entry];
69}
70
71if (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 // TODO: I really miss template strings here.
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}