var promise = new Promise(function(resolve, reject) { builder.styles(nodes) .use('styles', builder.plugins.css()) .end(function(err, string) { (err ? reject(err) : resolve(string)); }); });
}, function (err, tree) { if (err) console.log(err), process.exit(1); mkdir('public'); builder.scripts(tree) .use('scripts', builder.plugins.js()) .use('json', builder.plugins.json()) .use('templates', jade({ string: false, runtime: true })) .use('templates', builder.plugins.string()) .end(function (err, js) { if (err) throw err; write('public/app.js', builder.scripts.require + jade.runtime + js); }); builder.styles(tree) .use('styles', builder.plugins.css()) .use('styles', stylus()) .use('styles', builder.plugins.urlRewriter('')) .end(function (err, string) { if (err) throw err; fs.writeFileSync('public/app.css', string); }); builder.files(tree, {destination: 'public'}) .use('images', builder.plugins.copy()) .use('files', builder.plugins.copy()) .end(); if (next) return next(); })
exports.styles = function (done) { var options = this.options; var build = Build.styles(this.tree, options); this.stylePlugins(build, options); build.end(function (err, css) { if (err) return done(err); if (!css) return done(null, ''); done(null, css); }); }
function buildStyles(done) { builder.styles(tree) .use('styles', builder.plugins.css()) .use('styles', stylus()) .use('styles', builder.plugins.urlRewriter('')) .end(function (err, css) { if (err) return log('Found error building styles: %s', err), done(err); return log('Styles built successfully'), done(null, css); }); }
Builder.prototype.styles = function (tree, done) { var path = join(this.out, this.opts.path) + '.css' var start = Date.now() var opts = this.opts Component .styles(tree, opts) .use('styles', stylus(opts)) .use('styles', plugins.urlRewriter(opts.prefix || '')) .end(function (err, css) { write(path, css) debug('built css in %dms (%s)', Date.now() - start, bytes(css.length)) done() }) }
resolve(options.root, resolverOptions, function (err, tree) { if (err) return deferScripts.reject(err); // only include `.js` files from components' `.scripts` field builder.scripts(tree, options) .use('templates', builder.plugins.string(options)) .use('json', builder.plugins.json(options)) .use('scripts', builder.plugins.js()) .end(function (err, output) { if (err) return deferScripts.reject(err); var entryPoints = Object.keys(tree.locals); if (entryPoints.length > 1) { return deferScripts.reject(new Error('multiple entry points implemented yet')); // consider using https://github.com/componentjs/bundler.js } var bootComponent = tree.locals[entryPoints[0]]; var settingsModule = '\nrequire.define("tarifa.json", '+JSON.stringify(currentSettings)+');\n'; var autoRequire = '\nrequire("' + bootComponent.canonical + '");'; output = builder.scripts.require + settingsModule + output + autoRequire; fs.writeFileSync(path.join(WWW, 'app.js'), output); deferScripts.resolve(); }); // only include `.css` files from components' `.styles` field builder.styles(tree) .use('styles', builder.plugins.css(), builder.plugins.urlRewriter(options.prefix || ''), autoprefix(options) ) .end(function (err, string) { if (err) return deferStyles.reject(err); fs.writeFileSync(path.join(WWW, 'app.css'), string); deferStyles.resolve(); }); // only copy `images` to the build folder builder.files(tree, options) .use('images', builder.plugins.copy()) .use('fonts', builder.plugins.copy()) .use('page', copyPages(options)) .end(deferAssets.resolve()); // callback optional });
Object.keys(bundles).forEach(function (name) { build.styles(bundles[name]) .use('styles', build.plugins.css()) .end(function (err, string) { if (err) throw err; if (string) { fs.writeFileSync(path.join(opts.build, name +'.css'), string); } }); build.scripts(bundles[name]) .use('scripts', build.plugins.js()) .use('templates', function (file, next) { file.read(function (err, buf) { if (err) { return next(err); } switch (file.extension) { case 'jade': buf = jade.render(String(buf)); break; } file.define = true; file.string = JSON.stringify(buf); next(); }); }) .build(function (err, js) { var file = null; if (err) { throw err; } else if (!js) { return; } // require code if (name === json.locals[0] && js) { //js = build.scripts.require + js; js = build.scripts.umd('./component/boot', 'spin', js); } file = path.join(opts.build, name + '.js'); fwrite(file, js, 'utf8'); }); });
/** * Build styles * @param {object} tree * @param {object} options */ function buildStyles(tree, options) { builder.styles(tree, options) .use('styles', builder.plugins.css()) .use('styles', builder.plugins.urlRewriter()) .end(function (err, output) { if (err) return done(err); //check there were styles if (typeof output !== 'string') { done(); return; } //create the file inside the build directory createFileInDirectoryAndWrite(buildStyle, output, function(err) { if (err) return done(err); done(); }); }) ; }
return function* bundleBuilder() { // root folder for bundle var bundleRoot = path.join(options.build, name); // build scripts var file; var js = yield builder.scripts(bundles[name]) .use('scripts', plugins.js({parse: options.parseJs === true})) .use('json', plugins.json()) .use('templates', plugins.string()) .end(); // add require implementation to main bundle if (name === json.locals[0]) js = builder.scripts.require + js; // uglify maybe if (js && js.length > 0 && options.uglifyjs) { js = UglifyJS.minify(js, options.uglifyjs).code; } // write or remove target file file = path.join(bundleRoot, 'script.js'); if (!js) { if (fs.existsSync(file)) fs.unlinkSync(file) } else { yield cofs.writeFile(file, js, 'utf8'); } // build styles var css = yield builder.styles(bundles[name]) .use('styles', plugins.urlRewriter(options.prefix || '')) .end(); if (css && css.length > 0) { // autoprefix maybe if (autoprefix) { css = autoprefix.process(css).css; } // minify maybe if (cleancss) { css = cleancss.minify(css); } } // write or remove target file file = path.join(bundleRoot, 'styles.css'); if (!css) { if (fs.existsSync(file)) fs.unlinkSync(file) } else { yield cofs.writeFile(file, css, 'utf8'); } // build files yield builder.files(bundles[name], { destination: bundleRoot }) .use('images', options.copyFiles ? plugins.copy() : plugins.symlink()) .use('fonts', options.copyFiles ? plugins.copy() : plugins.symlink()) .use('files', options.copyFiles ? plugins.copy() : plugins.symlink()) .end(); }