forked from componentjs/bundler-example
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuilder.js
More file actions
61 lines (55 loc) · 1.86 KB
/
builder.js
File metadata and controls
61 lines (55 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var fs = require('fs');
var path = require('path');
var build = require('component-builder');
var resolve = require('component-resolver');
var bundler = require('component-bundler');
var mkdir = require('mkdirp');
// create a bundle function of type `.pages`
// based on the `.locals` of a specific `component.json`
var options = {
root: path.join(__dirname, '.'), // where your main component.json is located
build: path.join(__dirname, 'build') // component build output
}
var json = require(path.join(options.root, 'component.json'));
var bundle = bundler.pages(json);
mkdir.sync(options.build);
// resolve the dependency tree
// while also installing any remote dependencies
resolve(options.root, {
install: true
}, function (err, tree) {
if (err) throw err;
// create the bundles
var bundles = bundle(tree);
// build each bundle
Object.keys(bundles).forEach(function (name) {
build.styles(bundles[name])
.use('styles', build.plugins.css())
.use('styles', build.plugins.urlRewriter())
.build(function (err, css) {
if (!css) return;
if (err) throw err;
var file = path.join(options.build, name + '/build.css');
mkdir.sync(options.build + '/' + name);
fs.writeFileSync(file, css, 'utf8');
});
build.scripts(bundles[name])
.use('scripts', build.plugins.js())
.build(function (err, js) {
if (!js) return;
if (err) throw err;
if (name === json.locals[0]) {
js = build.scripts.require + js; // add require impl to boot component
}
var file = path.join(options.build, name + '/build.js');
mkdir.sync(options.build + '/' + name);
fs.writeFileSync(file, js, 'utf8');
});
build.files(bundles[name], {
destination: options.build + '/' + name
})
.use('images', build.plugins.symlink())
.use('files', build.plugins.symlink())
.end();
});
});