forked from M3-Academy/vtex-cms-template-atualizado
307 lines
6.4 KiB
JavaScript
307 lines
6.4 KiB
JavaScript
|
const gulp = require("gulp"),
|
||
|
gulpif = require("gulp-if"),
|
||
|
del = require("del"),
|
||
|
connect = require("gulp-connect"),
|
||
|
sourcemaps = require("gulp-sourcemaps"),
|
||
|
autoprefixer = require("gulp-autoprefixer"),
|
||
|
sass = require('gulp-sass')(require('sass')),
|
||
|
imagemin = require("gulp-imagemin"),
|
||
|
rename = require("gulp-rename"),
|
||
|
apiMocker = require("connect-api-mocker"),
|
||
|
sprity = require("sprity"),
|
||
|
crypto = require("crypto"),
|
||
|
glob = require("glob"),
|
||
|
path = require("path"),
|
||
|
inlinesource = require("gulp-inline-source");
|
||
|
|
||
|
const VtexEmulation = require("./dev/VtexEmulation.js");
|
||
|
const webpack = require("webpack");
|
||
|
const pacote = require("./package.json");
|
||
|
|
||
|
const isProduction = process.env.NODE_ENV === "production";
|
||
|
|
||
|
const paths = {
|
||
|
styles: {
|
||
|
src: "src/arquivos/sass/*.{scss,css,sass}",
|
||
|
lib: "src/arquivos/sass/lib",
|
||
|
watch: "src/arquivos/sass/**/*.scss",
|
||
|
},
|
||
|
scripts: {
|
||
|
watch: "src/arquivos/js/**/*.js",
|
||
|
},
|
||
|
sprites: {
|
||
|
src: "src/arquivos/sprite/**/*.{png,jpg}",
|
||
|
},
|
||
|
img: {
|
||
|
src: "src/arquivos/img/**/*.{png,gif,jpg}",
|
||
|
watch: "src/arquivos/img/**/*.{png,gif,jpg}",
|
||
|
},
|
||
|
fonts: {
|
||
|
src: "src/arquivos/fonts/**.*",
|
||
|
},
|
||
|
html: {
|
||
|
watch: "src/**/*.html",
|
||
|
template: "src/template-pagina/",
|
||
|
subTemplate: "src/template-pagina/sub-templates/",
|
||
|
controlesVtex: "dev/controles-vtex/",
|
||
|
controlesCustomizados: "src/controles-customizados/",
|
||
|
prateleiras: "src/template-prateleira/",
|
||
|
},
|
||
|
output: "dist",
|
||
|
outputStatic: "dist/arquivos",
|
||
|
outputStaticCheckout: "dist/files",
|
||
|
tmp: ".temp",
|
||
|
};
|
||
|
|
||
|
function clean() {
|
||
|
return del([paths.output, paths.tmp]);
|
||
|
}
|
||
|
|
||
|
function styles() {
|
||
|
return gulp
|
||
|
.src(paths.styles.src)
|
||
|
.pipe(gulpif(!isProduction, sourcemaps.init()))
|
||
|
.pipe(
|
||
|
sass({
|
||
|
outputStyle: "compressed",
|
||
|
}).on("error", sass.logError)
|
||
|
)
|
||
|
.pipe(
|
||
|
autoprefixer({
|
||
|
cascade: false,
|
||
|
})
|
||
|
)
|
||
|
.pipe(
|
||
|
rename({
|
||
|
prefix: pacote.shopName + "--",
|
||
|
extname: ".css",
|
||
|
})
|
||
|
)
|
||
|
.pipe(gulpif(!isProduction, sourcemaps.write()))
|
||
|
.pipe(gulp.dest(paths.outputStatic))
|
||
|
.pipe(connect.reload());
|
||
|
}
|
||
|
|
||
|
function scripts() {
|
||
|
let webpackConfig;
|
||
|
|
||
|
switch (process.env.NODE_ENV) {
|
||
|
case "production":
|
||
|
webpackConfig = require("./webpack/webpack.prod.js");
|
||
|
break;
|
||
|
case "local":
|
||
|
webpackConfig = require("./webpack/webpack.local.js");
|
||
|
break;
|
||
|
case "localfast":
|
||
|
webpackConfig = require("./webpack/webpack.localfast.js");
|
||
|
break;
|
||
|
case "devfast":
|
||
|
webpackConfig = require("./webpack/webpack.devfast.js");
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
webpackConfig = require("./webpack/webpack.dev.js");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return new Promise((resolve) =>
|
||
|
webpack(webpackConfig, (err, stats) => {
|
||
|
if (err) console.log("Webpack", err);
|
||
|
|
||
|
console.log(
|
||
|
stats.toString({
|
||
|
all: false,
|
||
|
modules: true,
|
||
|
maxModules: 0,
|
||
|
errors: true,
|
||
|
warnings: true,
|
||
|
// our additional options
|
||
|
moduleTrace: true,
|
||
|
errorDetails: true,
|
||
|
colors: true,
|
||
|
chunks: true,
|
||
|
})
|
||
|
);
|
||
|
|
||
|
resolve();
|
||
|
connect.reload();
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function sprites(done) {
|
||
|
glob(paths.sprites.src, function (er, files) {
|
||
|
const hash = crypto
|
||
|
.createHash("md5")
|
||
|
.update(files.join(""))
|
||
|
.digest("hex");
|
||
|
|
||
|
sprity.create(
|
||
|
{
|
||
|
engine: "sprity-jimp",
|
||
|
src: paths.sprites.src,
|
||
|
style: "./_sprite.scss",
|
||
|
margin: 5,
|
||
|
prefix: "sprite",
|
||
|
processor: "css", // make sure you have installed sprity-sass
|
||
|
cssPath: "/arquivos/",
|
||
|
out: ".temp",
|
||
|
name: pacote.shopName + "-sprite-" + hash,
|
||
|
dimension: [
|
||
|
{ ratio: 1, dpi: 72 },
|
||
|
{ ratio: 2, dpi: 192 },
|
||
|
],
|
||
|
cachebuster: false,
|
||
|
},
|
||
|
() => {
|
||
|
gulp.src(".temp/*")
|
||
|
.pipe(
|
||
|
gulpif(
|
||
|
"*.png",
|
||
|
gulp.dest("dist/arquivos/"),
|
||
|
gulp.dest("src/arquivos/sass/lib")
|
||
|
)
|
||
|
)
|
||
|
.pipe(connect.reload());
|
||
|
done();
|
||
|
}
|
||
|
);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function img() {
|
||
|
let dest = paths.outputStatic;
|
||
|
|
||
|
if (!(process.env.NODE_ENV === "local")) {
|
||
|
dest = dest + "/img";
|
||
|
}
|
||
|
|
||
|
return gulp
|
||
|
.src(paths.img.src)
|
||
|
.pipe(gulpif(isProduction, imagemin()))
|
||
|
.pipe(gulp.dest(paths.outputStatic))
|
||
|
.pipe(connect.reload());
|
||
|
}
|
||
|
|
||
|
function html() {
|
||
|
// config folders
|
||
|
VtexEmulation.folders({
|
||
|
template: paths.html.template,
|
||
|
subTemplate: paths.html.subTemplate,
|
||
|
controlesVtex: paths.html.controlesVtex,
|
||
|
controleCustomizado: paths.html.controlesCustomizados,
|
||
|
prateleira: paths.html.prateleiras,
|
||
|
});
|
||
|
|
||
|
VtexEmulation.startEngine();
|
||
|
|
||
|
return gulp
|
||
|
.src(VtexEmulation.folders().template + "*.html")
|
||
|
.pipe(VtexEmulation.process())
|
||
|
.pipe(
|
||
|
inlinesource({
|
||
|
compress: true,
|
||
|
rootpath: path.resolve("src/arquivos"),
|
||
|
})
|
||
|
)
|
||
|
.pipe(gulp.dest(paths.output))
|
||
|
.pipe(connect.reload());
|
||
|
}
|
||
|
|
||
|
function htmlProd() {
|
||
|
return gulp
|
||
|
.src([
|
||
|
paths.html.prateleiras + "**/*.html",
|
||
|
paths.html.template + "**/*.html",
|
||
|
])
|
||
|
.pipe(
|
||
|
inlinesource({
|
||
|
compress: true,
|
||
|
rootpath: path.resolve("src/arquivos"),
|
||
|
})
|
||
|
)
|
||
|
.pipe(gulp.dest(paths.output));
|
||
|
}
|
||
|
|
||
|
function customFonts() {
|
||
|
return gulp
|
||
|
.src(paths.fonts.src)
|
||
|
.pipe(
|
||
|
rename((path) => ({
|
||
|
dirname: "",
|
||
|
basename: path.basename,
|
||
|
extname: path.extname + ".css",
|
||
|
}))
|
||
|
)
|
||
|
.pipe(gulp.dest(paths.outputStatic))
|
||
|
.pipe(connect.reload());
|
||
|
}
|
||
|
|
||
|
function watch() {
|
||
|
devServer();
|
||
|
gulp.watch(paths.scripts.watch, { ignoreInitial: false }, scripts);
|
||
|
gulp.watch(paths.sprites.src, { ignoreInitial: false }, sprites);
|
||
|
gulp.watch(paths.styles.watch, { ignoreInitial: false }, styles);
|
||
|
gulp.watch(paths.img.watch, { ignoreInitial: false }, img);
|
||
|
gulp.watch(paths.html.watch, { ignoreInitial: false }, html);
|
||
|
gulp.watch(paths.fonts.src, { ignoreInitial: false }, customFonts);
|
||
|
}
|
||
|
|
||
|
function devServer() {
|
||
|
connect.server({
|
||
|
root: paths.output,
|
||
|
livereload: true,
|
||
|
port: 3000,
|
||
|
middleware: function (_connect, options) {
|
||
|
console.log(_connect);
|
||
|
var middlewares = [];
|
||
|
|
||
|
// Api get user profile
|
||
|
middlewares.push(
|
||
|
apiMocker(
|
||
|
"/no-cache/profileSystem/getProfile",
|
||
|
"dev/api/usuario/"
|
||
|
)
|
||
|
);
|
||
|
|
||
|
//api masterData
|
||
|
middlewares.push(
|
||
|
apiMocker(
|
||
|
"/" + pacote.shopName + "/dataentities/",
|
||
|
"dev/api/masterdata"
|
||
|
)
|
||
|
);
|
||
|
|
||
|
//api masterData
|
||
|
middlewares.push(
|
||
|
apiMocker(
|
||
|
"/api/catalog_system/pub/products/search/",
|
||
|
"dev/api/produtos/"
|
||
|
)
|
||
|
);
|
||
|
|
||
|
return middlewares;
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
|
||
|
const build = gulp.series(
|
||
|
clean,
|
||
|
gulp.parallel(
|
||
|
htmlProd,
|
||
|
gulp.series(sprites, customFonts, styles),
|
||
|
scripts,
|
||
|
img
|
||
|
)
|
||
|
);
|
||
|
|
||
|
exports.build = build;
|
||
|
exports.clean = clean;
|
||
|
exports.scripts = scripts;
|
||
|
exports.styles = styles;
|
||
|
exports.img = img;
|
||
|
exports.html = html;
|
||
|
exports.devServer = devServer;
|
||
|
exports.watch = gulp.series(build, watch);
|
||
|
exports.sprites = sprites;
|