Le blog de Victor Héry https://blog.victor-hery.com
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.
 
 
 
 
 

158 lines
3.9 KiB

import fs from "fs";
import path from "path";
import { src, dest, watch, parallel, series } from "gulp";
import { exec } from "child_process";
import { create as browserSyncCreate } from "browser-sync";
import run from "gulp-run-command";
import postcss from "gulp-postcss";
import magician from "postcss-font-magician";
import cssnano from "cssnano";
import postcssPresetEnv from "postcss-preset-env";
import rfs from "rfs";
import concat from "gulp-concat";
import terser from "gulp-terser";
const browserSync = browserSyncCreate();
const path404 = path.join(__dirname, "documentation/output/404.html");
const content_404 = () =>
fs.existsSync(path404) ? fs.readFileSync(path404) : null;
const cleanOutput = () => exec("cd documentation && rm -rf outout/");
const buildContent = () => exec("cd documentation && invoke build");
const compileBootstrapLess = () =>
exec(
"node_modules/recess/bin/recess --compile static/bootstrap/bootstrap.less > static/css/bootstrap.css"
);
const compileResponsiveLess = () =>
exec(
"node_modules/recess/bin/recess --compile static/bootstrap/responsive.less > static/css/bootstrap_responsive.css"
);
const reload = cb => {
browserSync.init(
{
ui: {
port: 9002
},
server: {
baseDir: "documentation/output",
serveStaticOptions: {
extensions: ["html"]
}
},
files: "documentation/output/*.html",
port: 9001
},
(_, bs) => {
bs.addMiddleware("*", (_, res) => {
res.write(content_404());
res.end();
});
}
);
cb();
};
const watchFiles = () => {
watch(
[
"documentation/content/**/*.md",
"documentation/content/**/*.rest",
"documentation/pelicanconf.py",
"documentation/publishconf.py",
"templates/**/*.html",
"static/**/*.css",
"static/**/*.less",
"static/**/*.js",
"!static/**/bootstrap.css",
"!static/**/bootstrap_responsive.css",
"!static/**/elegant.prod.9e9d5ce754.css",
"!static/js/elegant.prod.9e9d5ce754.js"
],
{ ignoreInitial: false },
buildAll
);
};
const pathProdCSS = path.join(
__dirname,
"static/css/elegant.prod.9e9d5ce754.css"
);
const rmProdCSS = cb => {
if (fs.existsSync(pathProdCSS)) {
fs.unlinkSync(pathProdCSS);
}
cb();
};
const minifyJS = () => {
return src([
"static/applause-button/applause-button.js",
"static/photoswipe/photoswipe.js",
"static/photoswipe/photoswipe-ui-default.js",
"static/photoswipe/photoswipe-array-from-dom.js",
"static/lunr/lunr.js",
"static/clipboard/clipboard.js",
"static/js/copy-to-clipboard.js",
"static/js/lunr-search-result.js",
"!static/js/elegant.prod.9e9d5ce754.js"
])
.pipe(concat("elegant.prod.9e9d5ce754.js"))
.pipe(terser())
.pipe(dest("static/js/"));
};
const compileCSS = () => {
const plugins = [
// postcssPresetEnv comes with autoprefixer
postcssPresetEnv({ stage: 1 }),
magician({}),
rfs(),
cssnano()
];
return src([
"static/applause-button/applause-button.css",
"static/photoswipe/photoswipe.css",
"static/photoswipe/default-skin/default-skin.css",
"static/css/*.css",
"!static/css/elegant.prod.9e9d5ce754.css"
])
.pipe(postcss(plugins))
.pipe(concat("elegant.prod.9e9d5ce754.css"))
.pipe(dest("static/css/"));
};
const buildAll = series(
rmProdCSS,
compileBootstrapLess,
compileResponsiveLess,
compileCSS,
minifyJS,
buildContent
);
exports.validate = run("jinja-ninja templates");
exports.js = minifyJS;
exports.css = series(
rmProdCSS,
compileBootstrapLess,
compileResponsiveLess,
compileCSS
);
const build = series(
compileBootstrapLess,
compileResponsiveLess,
compileCSS,
minifyJS,
cleanOutput,
buildContent
);
exports.build = build;
const elegant = series(build, parallel(watchFiles, reload));
exports.elegant = elegant;
exports.default = elegant;