saudade/gulpfile.js

107 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

const {src, dest, watch, parallel} = require('gulp')
const tap = require('gulp-tap')
const rename = require('gulp-rename')
const browserSync = require('browser-sync').create()
const posthtml = require('gulp-posthtml')
2023-07-07 16:02:16 -07:00
const posthtmlUrls = require('posthtml-urls')
const posthtmlPostcss = require('posthtml-postcss')
const posthtmlModules = require('posthtml-modules')
const sourcemaps = require('gulp-sourcemaps')
const postcss = require('gulp-postcss')
2023-07-07 16:02:16 -07:00
const postcssPresetEnv = require('postcss-preset-env')
const cssnano = require('cssnano')
const posthtmlUrlsFilter = require('./posthtmlUrlsConfig')
const bsConfig = require('./bs-config')
const htmlFiles = [
2023-07-07 15:19:59 -07:00
'**/*.html',
'!**/index.html',
'!**/includes/**/*.html',
'!node_modules/**/*.*',
]
const cssFiles = [
2023-07-07 15:19:59 -07:00
'**/*.css',
2023-07-07 15:25:36 -07:00
'!**/style.css',
2023-07-07 15:19:59 -07:00
'!style/*.css',
'!node_modules/**/*.*',
]
const postcssPlugins = [
2023-07-07 16:02:16 -07:00
postcssPresetEnv({
2023-07-07 15:19:59 -07:00
enableClientSidePolyfills: true,
}),
2023-07-07 16:02:16 -07:00
cssnano({
2023-07-07 15:19:59 -07:00
preset: 'default',
})
]
const posthtmlPlugins = [
2023-07-07 16:02:16 -07:00
posthtmlUrls({
2023-07-07 15:19:59 -07:00
eachURL: (url) => {
if (url.endsWith('?@root')) {
return url.replace('?@root', '')
} else if (url.startsWith('/')) {
return `/${site}${url}`
} else {
return url
}
},
2023-07-07 16:02:16 -07:00
filter: posthtmlUrlsFilter,
2023-07-07 15:19:59 -07:00
}),
2023-07-07 16:02:16 -07:00
posthtmlPostcss(postcssPlugins, {}, /^text\/css$/)
]
let site = ''
function html() {
2023-07-07 15:19:59 -07:00
const stream = src(htmlFiles)
.pipe(tap(file => {
const path = file.path.split('/')
site = path[path.indexOf('saudade') + 1]
}))
.pipe(posthtml([
...posthtmlPlugins,
2023-07-07 16:02:16 -07:00
posthtmlModules({
2023-07-07 15:19:59 -07:00
plugins: posthtmlPlugins
}),
]))
2023-07-07 16:02:16 -07:00
.pipe(rename(path => {
2023-07-07 15:19:59 -07:00
path.basename = 'index'
}))
.pipe(dest('.'))
2023-07-07 15:19:59 -07:00
if (browserSync.active) {
stream.pipe(browserSync.stream())
}
2023-07-07 15:19:59 -07:00
return stream
}
function css() {
2023-07-07 15:19:59 -07:00
const stream = src(cssFiles)
.pipe(sourcemaps.init())
.pipe(postcss(postcssPlugins))
.pipe(rename(path => {
path.basename = 'style'
}))
.pipe(sourcemaps.write())
.pipe(dest('.'))
2023-07-07 15:19:59 -07:00
if (browserSync.active) {
stream.pipe(browserSync.stream())
}
2023-07-07 15:19:59 -07:00
return stream
2023-06-14 22:10:06 -07:00
}
exports.watch = function () {
2023-07-07 16:02:16 -07:00
browserSync.init(bsConfig)
2023-06-14 22:10:06 -07:00
2023-07-07 15:19:59 -07:00
watch(htmlFiles, {ignoreInitial: false}, html)
watch(cssFiles, {ignoreInitial: false}, css)
2023-06-14 22:10:06 -07:00
}
exports.build = parallel(html, css)