diff --git a/bedrock.config.js b/bedrock.config.js index 49ffd2e..17b3598 100644 --- a/bedrock.config.js +++ b/bedrock.config.js @@ -18,6 +18,7 @@ module.exports = { }, styleguide: { url: '/styleguide', + overrideStyleguideTemplates: false, search: true, colors: './content/scss/_colors.scss', categoryOrder: [ diff --git a/core/cli/bedrock b/core/cli/bedrock new file mode 100755 index 0000000..da727ed --- /dev/null +++ b/core/cli/bedrock @@ -0,0 +1,16 @@ +#! /usr/bin/env node + +'use strict'; + +const program = require('commander'); + +const cliVersion = require('../../package.json').version; + +program + .version(cliVersion, '-v, --version'); + +program + .command('build', 'Build a static site'); + +program + .parse(process.argv); diff --git a/core/cli/bedrock-build b/core/cli/bedrock-build new file mode 100755 index 0000000..06ed5f0 --- /dev/null +++ b/core/cli/bedrock-build @@ -0,0 +1,17 @@ +#! /usr/bin/env node + +'use strict'; + +const program = require('commander'); +const gulp = require('gulp'); + +const defineGulpTasks = require('../tasks/gulpfile'); + +program + .action(() => { + defineGulpTasks(); + gulp.series('build')(); + }); + +program + .parse(process.argv); diff --git a/core/discovery/default-config.js b/core/discovery/default-config.js index 4b0d96f..9cc32e8 100644 --- a/core/discovery/default-config.js +++ b/core/discovery/default-config.js @@ -28,6 +28,12 @@ const defaultConfig = { */ styleguide: { url: '/styleguide', + /** + * overrideStyleguideTemplates [boolean] + * Make Bedrock use the current directory's styleguide + * templates instead of Bedrock's core styleguide templates. + */ + overrideStyleguideTemplates: false, /** * search [boolean] * Feature flag for search feature diff --git a/core/paths.js b/core/paths.js index af8ae7c..bce30d9 100644 --- a/core/paths.js +++ b/core/paths.js @@ -6,9 +6,15 @@ const config = require('./discovery/config'); const contentPath = 'content/'; const corePath = 'core/'; +const absoluteCorePath = __dirname; const compiledPath = 'tmp/'; const distPath = 'dist/'; +const styleguideTemplatesPath = + config.styleguide.overrideStyleguideTemplates + ? path.join(contentPath, 'templates/_styleguide') + : path.join(absoluteCorePath, 'templates/styleguide'); + module.exports = { content: { path: contentPath, @@ -60,20 +66,20 @@ module.exports = { core: { path: corePath, js: { - entryFile: path.join(corePath, 'js/index.js'), - allFiles: path.join(corePath, 'js/**/*.js') + entryFile: path.join(absoluteCorePath, 'js/index.js'), + allFiles: path.join(absoluteCorePath, 'js/**/*.js') }, scss: { all: path.join(corePath, 'scss/**/*.scss'), - prism: path.join(corePath, 'scss/prism-styleguide.scss'), - prototype: path.join(corePath, 'scss/prototype.scss') + prism: path.join(absoluteCorePath, 'scss/prism-styleguide.scss'), + prototype: path.join(absoluteCorePath, 'scss/prototype.scss') }, templates: { styleguide: { - index: path.join(corePath, 'templates/styleguide/index.pug'), - doc: path.join(corePath, 'templates/styleguide/doc.pug'), - colors: path.join(corePath, 'templates/styleguide/colors.pug'), - componentGroup: path.join(corePath, 'templates/styleguide/component-group.pug') + index: path.join(styleguideTemplatesPath, 'index.pug'), + doc: path.join(styleguideTemplatesPath, 'doc.pug'), + colors: path.join(styleguideTemplatesPath, 'colors.pug'), + componentGroup: path.join(styleguideTemplatesPath, 'component-group.pug') } } }, diff --git a/core/tasks/gulpfile.js b/core/tasks/gulpfile.js new file mode 100644 index 0000000..e066488 --- /dev/null +++ b/core/tasks/gulpfile.js @@ -0,0 +1,68 @@ +'use strict'; + +const gulp = require('gulp'); +const runSequence = require('run-sequence'); + +const browserSync = require('./browser-sync'); +const bundle = require('./bundle'); +const templates = require('./templates'); +const copy = require('./copy'); +const watch = require('./watch'); +const server = require('./server'); +const iconFont = require('./icon-font'); + +// Configs +const config = require('../discovery/config'); + +// Sass is used to render core templates so is needed, even if you use postcss in your content part +const sass = require('./sass'); +const postcss = require('./postcss'); + +// Optional tasks: Purge CSS and minify CSS +const purge = require('./purge'); +const minifyCSS = require('./minify-css'); + +// Execute this task instead of optional tasks +const dummy = require('./dummy'); + +function defineGulpTasks() { +gulp.task('templates:clean', templates.clean); +gulp.task('sass', sass); +gulp.task('postcss', postcss); +gulp.task('minifyCSS', minifyCSS); +gulp.task('purgeCSS', purge); +gulp.task('server', server); +gulp.task('dummy', dummy); +gulp.task('copy:images', copy.images); +gulp.task('copy:fonts', copy.fonts); +gulp.task('copy:favicon', copy.favicon); +gulp.task('copy:resources', copy.resources); +gulp.task('copy:scripts', copy.scripts); +gulp.task('copy:compiledToDist', copy.compiledToDist); +gulp.task('bundle:clientBundle', bundle.clientBundle); +gulp.task('bundle:prototypeBundle', bundle.prototypeBundle); +gulp.task('icon-font', iconFont); + +gulp.task('templates:compile:content', templates.compile.content); +gulp.task('templates:compile:styleguide', templates.compile.styleguide); +gulp.task('templates:compile:docs', templates.compile.docs); + +gulp.task('templates:compile', config.styleguide ? + gulp.parallel('templates:compile:content', 'templates:compile:styleguide', 'templates:compile:docs') : + gulp.series('templates:compile:content') +); + +gulp.task('watch', watch); +gulp.task('copy', gulp.parallel('copy:images', 'copy:fonts', 'copy:resources', 'copy:scripts', 'copy:favicon')); +gulp.task('compile-all', gulp.parallel('templates:clean', 'icon-font', 'bundle:clientBundle', 'bundle:prototypeBundle', 'sass', 'postcss', 'copy')); + +gulp.task('build', gulp.series('compile-all', 'templates:compile', 'copy:compiledToDist', config.css.purge ? 'purgeCSS' : 'dummy', config.css.minify ? 'minifyCSS': 'dummy'), function (done) { + console.log('------------\n'); + console.log('Build finished. Compiled files can be found in the dist/ directory.'); + process.exit(0); +}); + +gulp.task('default', gulp.parallel('server', 'compile-all', 'watch', browserSync)); + +} +module.exports = defineGulpTasks; diff --git a/core/tasks/templates.js b/core/tasks/templates.js index 80aedc8..316b144 100644 --- a/core/tasks/templates.js +++ b/core/tasks/templates.js @@ -45,7 +45,7 @@ module.exports = { const tasks = Object.keys(defaultLocals.components.byGroup).map(componentGroup => { return gulp.src([ - path.join(bedrockDir, paths.core.templates.styleguide.componentGroup) + paths.core.templates.styleguide.componentGroup ]) .pipe(data(function (file) { return Object.assign({}, getDefaultLocals(), { @@ -63,7 +63,7 @@ module.exports = { tasks.push( gulp.src([ - path.join(bedrockDir, paths.core.templates.styleguide.index) + paths.core.templates.styleguide.index ]) .pipe(data(function (file) { return Object.assign({}, getDefaultLocals(), { @@ -86,7 +86,7 @@ module.exports = { const tasks = defaultLocals.docs.allDocs.map(doc => { return gulp.src( - path.join(bedrockDir, paths.core.templates.styleguide.doc) + paths.core.templates.styleguide.doc ) .pipe(data(function (file) { return Object.assign({}, getDefaultLocals(), { diff --git a/gulpfile.js b/gulpfile.js index 59f594d..5c4d905 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,64 +1,4 @@ 'use strict'; -const gulp = require('gulp'); -const runSequence = require('run-sequence'); - -const browserSync = require('./core/tasks/browser-sync'); -const bundle = require('./core/tasks/bundle'); -const templates = require('./core/tasks/templates'); -const copy = require('./core/tasks/copy'); -const watch = require('./core/tasks/watch'); -const server = require('./core/tasks/server'); -const iconFont = require('./core/tasks/icon-font'); - -// Configs -const config = require('./core/discovery/config'); - -// Sass is used to render core templates so is needed, even if you use postcss in your content part -const sass = require('./core/tasks/sass'); -const postcss = require('./core/tasks/postcss'); - -// Optional tasks: Purge CSS and minify CSS -const purge = require('./core/tasks/purge'); -const minifyCSS = require('./core/tasks/minify-css'); - -// Execute this task instead of optional tasks -const dummy = require('./core/tasks/dummy'); - -gulp.task('templates:clean', templates.clean); -gulp.task('sass', sass); -gulp.task('postcss', postcss); -gulp.task('minifyCSS', minifyCSS); -gulp.task('purgeCSS', purge); -gulp.task('server', server); -gulp.task('dummy', dummy); -gulp.task('copy:images', copy.images); -gulp.task('copy:fonts', copy.fonts); -gulp.task('copy:favicon', copy.favicon); -gulp.task('copy:resources', copy.resources); -gulp.task('copy:scripts', copy.scripts); -gulp.task('copy:compiledToDist', copy.compiledToDist); -gulp.task('bundle:clientBundle', bundle.clientBundle); -gulp.task('bundle:prototypeBundle', bundle.prototypeBundle); -gulp.task('icon-font', iconFont); - -gulp.task('templates:compile:content', templates.compile.content); -gulp.task('templates:compile:styleguide', templates.compile.styleguide); -gulp.task('templates:compile:docs', templates.compile.docs); - -gulp.task('templates:compile', config.styleguide ? - gulp.parallel('templates:compile:content', 'templates:compile:styleguide', 'templates:compile:docs') : - gulp.series('templates:compile:content') -); - -gulp.task('watch', watch); -gulp.task('copy', gulp.parallel('copy:images', 'copy:fonts', 'copy:resources', 'copy:scripts', 'copy:favicon')); -gulp.task('compile-all', gulp.parallel('templates:clean', 'icon-font', 'bundle:clientBundle', 'bundle:prototypeBundle', 'sass', 'postcss', 'copy')); - -gulp.task('build', gulp.series('compile-all', 'templates:compile', 'copy:compiledToDist', config.css.purge ? 'purgeCSS' : 'dummy', config.css.minify ? 'minifyCSS': 'dummy'), function (done) { - console.log('------------\n'); - console.log('Build finished. Compiled files can be found in the dist/ directory.'); - process.exit(0); -}); - -gulp.task('default', gulp.parallel('server', 'compile-all', 'watch', browserSync)); +const defineGulpTasks = require('./core/tasks/gulpfile'); +defineGulpTasks(); diff --git a/package.json b/package.json index c65dd1e..3d48f61 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,9 @@ "build": "gulp build", "build-prod": "NODE_ENV=production gulp build" }, + "bin": { + "bedrock": "./core/cli/bedrock" + }, "repository": { "type": "git", "url": "git+https://github.com/usebedrock/bedrock.git" @@ -21,6 +24,8 @@ }, "homepage": "https://bedrockapp.org", "devDependencies": { + }, + "dependencies": { "@babel/core": "^7.14.6", "@babel/preset-env": "^7.14.5", "autoprefixer": "^9.8.6", @@ -81,6 +86,5 @@ "through2": "^4.0.2", "vinyl-buffer": "^1.0.1", "vinyl-source-stream": "^2.0.0" - }, - "dependencies": {} + } }