UNPKG

3.01 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 entry = '';
17var files = [];
18var packageConfig = {};
19var babelOptions = null;
20
21var packageFile = path.resolve(process.cwd(), './package.json');
22
23var stats = (function statsIIFE() {
24 try {
25 return fs.statSync(packageFile);
26 } catch (e) {
27 return null;
28 }
29})();
30
31if (stats && stats.isFile()) {
32 libPkg = require(packageFile);
33 libName = libPkg.name;
34 packageConfig = libPkg.rollupBabelLibBundler || {};
35
36 // FIXME: That's actually not the way it should be. `jsnext:main` is most likely the output,
37 // not the input. This needs to be changed requiring a new major version according to SemVer
38 if (libPkg['jsnext:main']) {
39 entry = ['jsnext:main'];
40 }
41}
42
43program.version(pkg.version)
44 .usage('[options] <file ...>')
45 .option('-n, --lib-name <libName>',
46 'Library name (defaults to `name` from `package.json` if available)')
47 .option('--module-name <moduleName>', 'Module name for UMD build')
48 .option('-f, --format <format>', 'Build formats (comma separated; default: es6,umd,cjs)')
49 .option('-d, --dest <dest>', 'Destination')
50 .parse(process.argv);
51
52libName = program.libName || libName || 'library';
53moduleName = program.moduleName || packageConfig.moduleName || moduleName;
54format = program.format || packageConfig.format || format;
55dest = program.dest || packageConfig.dest || dest;
56babelOptions = packageConfig.babel || babelOptions;
57
58files = program.args || packageConfig.files;
59if (files.length === 0) {
60 files = [entry];
61}
62
63if (files.length > 0) {
64 files.forEach(function forEach(arg) {
65 var bundleFormat = (function (f) {
66 if (!f) {
67 return void 0;
68 }
69
70 if (typeof f === 'string') {
71 return f.split(',');
72 }
73
74 return format;
75 })(format);
76
77 rollupBabelLibBundler({
78 name: libName,
79 moduleName: moduleName,
80 dest: dest,
81 entry: arg,
82 format: bundleFormat,
83 babel: babelOptions
84 }).then(function buildThen(builds) {
85 console.log('All done!');
86
87 builds.forEach(function buildForEach(buildStats) {
88 var moduleFormat = buildStats.format.toUpperCase();
89 var buildName = buildStats.name;
90 var duration = buildStats.endTime - buildStats.startTime;
91
92 // TODO: I really miss template strings here.
93 var o = 'Built ' + moduleFormat + ' module for ' + buildName + '. Took ' + duration + ' ms';
94
95 console.log(o);
96 });
97 }).catch(function buildCatch(err) {
98 console.log('Error while generating a build:');
99
100 if (err.stack) {
101 console.error(err.stack);
102 } else {
103 if (err.message) {
104 console.error(err.message);
105 }
106 }
107
108 process.exit(1);
109 });
110 });
111} else {
112 console.log('No files specified');
113}