diff options
author | Dan Allen <dan@opendevise.com> | 2018-12-30 03:39:35 -0700 |
---|---|---|
committer | Dan Allen <dan@opendevise.com> | 2018-12-30 03:39:35 -0700 |
commit | 7367f6c184fdf7910ffc118b12189465f0894a19 (patch) | |
tree | 23b46cc7faf40d328deec9a7af5c3553c087fabc | |
parent | 6155f7fa523ad9687a54eecb70efffccc4923b81 (diff) | |
download | alpine-antora-theme-7367f6c184fdf7910ffc118b12189465f0894a19.tar.bz2 alpine-antora-theme-7367f6c184fdf7910ffc118b12189465f0894a19.tar.xz |
reorganize Gulp build
- rename exec argument to call
- pick off and use first argument of exportTasks function as default task
- remove use of path
- use gulp.watch instead of chokidar (which, in turn, uses chokidar)
- add loop and opts arguments to task function (currently unused)
-rw-r--r-- | gulpfile.js/index.js | 48 | ||||
-rw-r--r-- | gulpfile.js/lib/export-tasks.js | 14 | ||||
-rw-r--r-- | gulpfile.js/lib/task.js | 11 | ||||
-rw-r--r-- | gulpfile.js/preview-serve.js | 17 | ||||
-rw-r--r-- | package.json | 1 | ||||
-rw-r--r-- | yarn.lock | 2 |
6 files changed, 48 insertions, 45 deletions
diff --git a/gulpfile.js/index.js b/gulpfile.js/index.js index 71ca933..2adc946 100644 --- a/gulpfile.js/index.js +++ b/gulpfile.js/index.js @@ -1,108 +1,102 @@ 'use strict' const { parallel, series, tree } = require('gulp') -const camelcase = (name) => name.replace(/[-]./g, (m) => m.substr(1).toUpperCase()) -const exportTasks = require('./lib/export-tasks') +const camelCase = (name) => name.replace(/[-]./g, (m) => m.substr(1).toUpperCase()) const task = require('./lib/task') -const taskFns = require('require-directory')(module, '.', { recurse: false, rename: camelcase }) -const path = require('path') +const tasks = require('require-directory')(module, '.', { recurse: false, rename: camelCase }) const bundleName = 'ui' const buildDir = 'build' const previewSiteSrcDir = 'preview-site-src' const previewSiteDestDir = 'public' const srcDir = 'src' -const destDir = path.join(previewSiteDestDir, '_') +const destDir = `${previewSiteDestDir}/_` const { reload: livereload } = process.env.LIVERELOAD === 'true' ? require('gulp-connect') : {} -const cssFileGlobs = path.join(srcDir, 'css/**/*.css') -const jsFileGlobs = ['gulpfile.js/**/*.js', path.join(srcDir, '{helpers,js}/**/*.js')] - -const { remove, lintCss, lintJs, format, build, pack, previewPages, previewServe } = taskFns +const glob = { cssFiles: `${srcDir}/css/**/*.css`, jsFiles: ['gulpfile.js/**/*.js', `${srcDir}/{helpers,js}/**/*.js`] } +const { remove, lintCss, lintJs, format, build, pack, previewPages, previewServe } = tasks const cleanTask = task({ name: 'clean', desc: 'Clean files and folders generated by build', - exec: remove(['build', 'public']), + call: remove(['build', 'public']), }) const lintCssTask = task({ name: 'lint:css', desc: 'Lint the CSS source files using stylelint (standard config)', - exec: lintCss(cssFileGlobs), + call: lintCss(glob.cssFiles), }) const lintJsTask = task({ name: 'lint:js', desc: 'Lint the JavaScript source files using eslint (JavaScript Standard Style)', - exec: lintJs(jsFileGlobs), + call: lintJs(glob.jsFiles), }) const lintTask = task({ name: 'lint', desc: 'Lint the CSS and JavaScript source files', - exec: parallel(lintCssTask, lintJsTask), + call: parallel(lintCssTask, lintJsTask), }) const formatTask = task({ name: 'format', desc: 'Format the JavaScript source files using prettify (JavaScript Standard Style)', - exec: format(jsFileGlobs), + call: format(glob.jsFiles), }) const buildTask = task({ name: 'build', desc: 'Build and stage the UI assets for bundling', - exec: build(srcDir, destDir, tree().nodes.some((name) => ~name.indexOf('preview'))), + call: build(srcDir, destDir, tree().nodes.some((name) => ~name.indexOf('preview'))), }) const bundleBuildTask = task({ name: 'bundle:build', - exec: series(cleanTask, lintTask, buildTask), + call: series(cleanTask, lintTask, buildTask), }) const bundlePackTask = task({ name: 'bundle:pack', desc: 'Create a bundle of the staged UI assets for publishing', - exec: pack(destDir, buildDir, bundleName), + call: pack(destDir, buildDir, bundleName), }) const bundleTask = task({ name: 'bundle', desc: 'Clean, lint, build, and bundle the UI for publishing', - exec: series(bundleBuildTask, bundlePackTask), + call: series(bundleBuildTask, bundlePackTask), }) const previewPagesTask = task({ name: 'preview:pages', - exec: previewPages(srcDir, destDir, previewSiteSrcDir, previewSiteDestDir, livereload), + call: previewPages(srcDir, destDir, previewSiteSrcDir, previewSiteDestDir, livereload), }) const previewBuildTask = task({ name: 'preview:build', desc: 'Process and stage the UI assets and generate pages for the preview', - exec: parallel(buildTask, previewPagesTask), + call: parallel(buildTask, previewPagesTask), }) const previewServeTask = task({ name: 'preview:serve', - exec: previewServe(previewSiteDestDir, { + call: previewServe(previewSiteDestDir, { port: 5252, livereload, - watch: { src: [srcDir, previewSiteSrcDir], onChange: previewBuildTask }, + watch: { glob: [srcDir, previewSiteSrcDir], call: previewBuildTask }, }), }) const previewTask = task({ name: 'preview', desc: 'Generate a preview site and launch a server to view it', - exec: series(previewBuildTask, previewServeTask), + call: series(previewBuildTask, previewServeTask), }) -const defaultTask = task({ name: 'default', desc: `(${bundleTask.displayName})`, exec: series(bundleTask) }) - -module.exports = exportTasks( - defaultTask, +module.exports = require('./lib/export-tasks')( + bundleTask, cleanTask, lintTask, formatTask, diff --git a/gulpfile.js/lib/export-tasks.js b/gulpfile.js/lib/export-tasks.js index 834cd9e..7c9de48 100644 --- a/gulpfile.js/lib/export-tasks.js +++ b/gulpfile.js/lib/export-tasks.js @@ -1,4 +1,14 @@ 'use strict' -module.exports = (...tasks) => - tasks.reduce((acc, task) => (acc[task.displayName || task.name] = task) && acc, { default: tasks.shift() }) +module.exports = (...tasks) => { + const seed = {} + if (tasks.length) { + if (tasks.lastIndexOf(tasks[0]) > 0) { + const task1 = tasks.shift() + seed.default = Object.assign(task1.bind(null), { description: `=> ${task1.displayName}`, displayName: 'default' }) + } + return tasks.reduce((acc, it) => (acc[it.displayName || it.name] = it) && acc, seed) + } else { + return seed + } +} diff --git a/gulpfile.js/lib/task.js b/gulpfile.js/lib/task.js index 9878f27..8c90062 100644 --- a/gulpfile.js/lib/task.js +++ b/gulpfile.js/lib/task.js @@ -1,8 +1,9 @@ 'use strict' const metadata = require('undertaker/lib/helpers/metadata') +const { watch } = require('gulp') -module.exports = ({ name, desc, exec: fn }) => { +module.exports = ({ name, desc, opts, call: fn, loop }) => { if (name) { const displayName = fn.displayName if (displayName === '<series>' || displayName === '<parallel>') { @@ -10,6 +11,14 @@ module.exports = ({ name, desc, exec: fn }) => { } fn.displayName = name } + if (loop) { + const delegate = fn + name = delegate.displayName + delegate.displayName = `${name}:loop` + fn = () => watch(loop, { ignoreInitial: false }, delegate) + fn.displayName = name + } if (desc) fn.description = desc + if (opts) fn.flags = opts return fn } diff --git a/gulpfile.js/preview-serve.js b/gulpfile.js/preview-serve.js index 9dcf39e..8ae70cf 100644 --- a/gulpfile.js/preview-serve.js +++ b/gulpfile.js/preview-serve.js @@ -1,23 +1,14 @@ 'use strict' -const chokidar = require('chokidar') const connect = require('gulp-connect') +const { watch } = require('gulp') module.exports = (serveDir, opts = {}) => (done) => { - const watch = opts.watch + const { glob: watchGlob, call: watchCall } = opts.watch || {} + opts = { ...opts, root: serveDir } delete opts.watch - opts = Object.assign({ root: serveDir }, opts) - let onStart - if (watch && watch.src && watch.onChange) { - onStart = () => - chokidar - .watch(watch.src, { ignoreInitial: true }) - .on('add', watch.onChange) - .on('change', watch.onChange) - .on('unlink', watch.onChange) - } connect.server(opts, function () { this.server.on('close', done) - if (onStart) onStart() + if (watchGlob && watchCall) watch(watchGlob, watchCall) }) } diff --git a/package.json b/package.json index 423eec1..db3735f 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "devDependencies": { "autoprefixer": "~9.4", "browserify": "~16.2", - "chokidar": "~2.0", "cssnano": "~4.1", "eslint": "~5.11", "eslint-config-standard": "~12.0", @@ -1107,7 +1107,7 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.0.0, chokidar@~2.0: +chokidar@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== |