Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.83 KB | None | 0 0
  1. import {src, dest, watch, series, parallel} from 'gulp';
  2. import yargs from 'yargs';
  3. import sass from 'gulp-sass';
  4. import cleanCss from 'gulp-clean-css';
  5. import gulpif from 'gulp-if';
  6. import postcss from 'gulp-postcss';
  7. import sourcemaps from 'gulp-sourcemaps';
  8. import autoprefixer from 'autoprefixer';
  9. import imagemin from 'gulp-imagemin';
  10. import del from 'del';
  11. import webpack from 'webpack-stream';
  12. import browserSync from 'browser-sync';
  13. import critical from 'critical';
  14. import cave from 'cave';
  15. import fs from 'fs';
  16. import vinyl from 'vinyl-named';
  17. import onlyifchanged from 'only-if-changed-webpack-plugin';
  18. import { randomBytes } from 'crypto';
  19. import path from 'path';
  20.  
  21. const PRODUCTION = yargs.argv.prod;
  22. const SERVER = browserSync.create();
  23.  
  24. export const serve = (done) => {
  25. SERVER.init({
  26. proxy: '',
  27. });
  28. done();
  29. };
  30. export const reload = done => {
  31. SERVER.reload();
  32. done();
  33. };
  34.  
  35. export const watchForChanges = () => {
  36. watch('./assets/src/scss/**/*.scss', series(styles));
  37. watch('./assets/src/images/**/*.{jpg,jpeg,png,svg,gif}', series(images, reload));
  38. watch(
  39. ['./assets/src/**/*', '!./assets/src/{images,js,scss}', '!./assets/src/{images,js,scss}/**/*'],
  40. series(copy, reload)
  41. );
  42. watch('./assets/src/js/**/*.js', series(scripts, reload));
  43. watch('**/*.php', reload);
  44. };
  45.  
  46. export const styles = () => {
  47. return src(["./assets/src/scss/*.scss"])
  48. .pipe(gulpif(!PRODUCTION, sourcemaps.init()))
  49. .pipe(
  50. sass({
  51. includePaths: ["node_modules/reset-css/sass", 'node_modules/@glidejs/glide/src/assets/sass']
  52. }).on("error", sass.logError)
  53. )
  54. .pipe(gulpif(PRODUCTION, postcss([autoprefixer])))
  55. .pipe(gulpif(PRODUCTION, cleanCss({ compatibility: "ie8" })))
  56. .pipe(gulpif(!PRODUCTION, sourcemaps.write()))
  57. .pipe(dest("./assets/dist/css"))
  58. .pipe(SERVER.stream());
  59. };
  60.  
  61. export const clean = () => {
  62. return del(['./assets/dist']);
  63. };
  64.  
  65. export const itscritical = (done) => {
  66. critical.generate({
  67. inline: false,
  68. src: '',
  69. css: './assets/dist/css/site.css',
  70. dest: './assets/dist/css/site.critical.css',
  71. }).then((css) => {
  72. fs.writeFileSync('./assets/dist/css/site.noncritical.css', cave('./assets/dist/css/site.css', {css: css, compress: true}));
  73. }).then(() => {
  74. del("./assets/dist/css/site.css");
  75. });
  76. done();
  77. }
  78.  
  79. export const images = () => {
  80. return src('./assets/src/images/**/*.{jpg,jpeg,png,svg,gif}')
  81. .pipe(gulpif(PRODUCTION, imagemin()))
  82. .pipe(dest('./assets/dist/images'));
  83. };
  84.  
  85. export const copy = () => {
  86. return src([
  87. './assets/src/**/*',
  88. '!./assets/src/{images,js,scss}',
  89. '!./assets/src/{images,js,scss}/**/*'
  90. ]).pipe(dest('./assets/dist'));
  91. };
  92.  
  93. export const scripts = () => {
  94. return src(["./assets/src/js/site.js", "./assets/src/js/site.admin.js"])
  95. .pipe(vinyl())
  96. .pipe(
  97. webpack(
  98. {
  99. module: {
  100. rules: [
  101. {
  102. test: /\.js$/,
  103. exclude: /node_modules/,
  104. loader: "babel-loader"
  105. }
  106. ]
  107. },
  108. mode: PRODUCTION ? "production" : "development",
  109. devtool: !PRODUCTION ? "inline-source-map" : false,
  110. externals: {
  111. jquery: "jQuery"
  112. },
  113. plugins: [
  114. new onlyifchanged({
  115. cacheDirectory: './assets/cache/tmp',
  116. cacheIdentifier: './assets/cache/tmp', // all variable opts/environment should be used in cache key
  117. })]
  118. }
  119. )
  120. )
  121. .pipe(dest("./assets/dist/js"));
  122. };
  123.  
  124. export const dev = series(
  125. clean,
  126. parallel(styles, images, copy, scripts),
  127. serve,
  128. watchForChanges
  129. );
  130.  
  131. export const build = series(clean, parallel(styles, images, copy, scripts), itscritical);
  132. export default dev;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement