You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.1 KiB
86 lines
2.1 KiB
'use strict'; |
|
|
|
const _ = require('lodash'); |
|
const chokidar = require('chokidar'); |
|
const path = require('path'); |
|
const renderAssets = require('./render-assets'); |
|
const renderPug = require('./render-pug'); |
|
const renderScripts = require('./render-scripts'); |
|
const renderSCSS = require('./render-scss'); |
|
|
|
const watcher = chokidar.watch('src', { |
|
persistent: true, |
|
}); |
|
|
|
let READY = false; |
|
|
|
process.title = 'pug-watch'; |
|
process.stdout.write('Loading'); |
|
let allPugFiles = {}; |
|
|
|
watcher.on('add', filePath => _processFile(filePath, 'add')); |
|
watcher.on('change', filePath => _processFile(filePath, 'change')); |
|
watcher.on('ready', () => { |
|
READY = true; |
|
console.log(' READY TO ROLL!'); |
|
}); |
|
|
|
_handleSCSS(); |
|
|
|
function _processFile(filePath, watchEvent) { |
|
|
|
if (!READY) { |
|
if (filePath.match(/\.pug$/)) { |
|
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { |
|
allPugFiles[filePath] = true; |
|
} |
|
} |
|
process.stdout.write('.'); |
|
return; |
|
} |
|
|
|
console.log(`### INFO: File event: ${watchEvent}: ${filePath}`); |
|
|
|
if (filePath.match(/\.pug$/)) { |
|
return _handlePug(filePath, watchEvent); |
|
} |
|
|
|
if (filePath.match(/\.scss$/)) { |
|
if (watchEvent === 'change') { |
|
return _handleSCSS(filePath, watchEvent); |
|
} |
|
return; |
|
} |
|
|
|
if (filePath.match(/src\/js\//)) { |
|
return renderScripts(); |
|
} |
|
|
|
if (filePath.match(/src\/assets\//)) { |
|
return renderAssets(); |
|
} |
|
|
|
} |
|
|
|
function _handlePug(filePath, watchEvent) { |
|
if (watchEvent === 'change') { |
|
if (filePath.match(/includes/) || filePath.match(/mixins/) || filePath.match(/\/pug\/layouts\//)) { |
|
return _renderAllPug(); |
|
} |
|
return renderPug(filePath); |
|
} |
|
if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { |
|
return renderPug(filePath); |
|
} |
|
} |
|
|
|
function _renderAllPug() { |
|
console.log('### INFO: Rendering All'); |
|
_.each(allPugFiles, (value, filePath) => { |
|
renderPug(filePath); |
|
}); |
|
} |
|
|
|
function _handleSCSS() { |
|
renderSCSS(); |
|
} |