From 4c6dfbf2c5ffc45f5da70d446cc08c9f3a4d11d1 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Fri, 28 Feb 2020 09:01:22 +0100 Subject: [PATCH] Enable live reloading for browsersync --- gulpfile.js | 42 +++++++++++++++++++++++++++++++----------- package.json | 3 +++ webpack.dev.js | 14 +------------- yarn.lock | Bin 493587 -> 518389 bytes 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 54180f453b..0374c0ba81 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,6 +1,6 @@ 'use strict'; -const { src, dest, series, parallel } = require('gulp'); +const { src, dest, series, parallel, watch } = require('gulp'); const browserSync = require('browser-sync').create(); const del = require('del'); const babel = require('gulp-babel'); @@ -9,6 +9,11 @@ const terser = require('gulp-terser'); const htmlmin = require('gulp-htmlmin'); const imagemin = require('gulp-imagemin'); const sourcemaps = require('gulp-sourcemaps'); +const mode = require('gulp-mode')({ + modes: ["production", "development"], + default: "development", + verbose: false + }); const webpack_stream = require('webpack-stream'); const webpack_config = require('./webpack.prod.js'); const inject = require('gulp-inject'); @@ -16,13 +21,21 @@ const postcss = require('gulp-postcss'); const cssnano = require('cssnano'); const autoprefixer = require('autoprefixer'); -function devBrowser() { +function serve() { browserSync.init({ server: { baseDir: "./dist" }, port: 8080 }); + + watch(['src/**/*.js', '!src/bundle.js'], javascript); + watch('src/bundle.js', webpack); + watch('src/**/*.css', css); + watch(['src/**/*.html', '!src/index.html'], html); + watch(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], images); + watch(['src/**/*.json', 'src/**/*.ico'], copy); + watch('src/index.html', injectBundle); } function setStandalone() { @@ -38,7 +51,7 @@ function clean() { function javascript() { return src(['src/**/*.js', '!src/bundle.js'], {base: './src/'}) - .pipe(sourcemaps.init({loadMaps: true})) + .pipe(mode.development(sourcemaps.init({loadMaps: true}))) .pipe(babel({ presets: ['@babel/preset-env'] })) @@ -46,41 +59,47 @@ function javascript() { keep_fnames: true, mangle: false })) - .pipe(sourcemaps.write('.')) - .pipe(dest('dist/')); + .pipe(mode.development(sourcemaps.write('.'))) + .pipe(dest('dist/')) + .pipe(browserSync.stream());; } function webpack() { return webpack_stream(webpack_config) - .pipe(dest('dist/')); + .pipe(dest('dist/')) + .pipe(browserSync.stream()); } function css() { return src('src/**/*.css', {base: './src/'}) - .pipe(sourcemaps.init({loadMaps: true})) + .pipe(mode.development(sourcemaps.init({loadMaps: true}))) .pipe(postcss([ autoprefixer(), cssnano() ])) - .pipe(sourcemaps.write('.')) - .pipe(dest('dist/')); + .pipe(mode.development(sourcemaps.write('.'))) + .pipe(dest('dist/')) + .pipe(browserSync.stream()); } function html() { return src(['src/**/*.html', '!src/index.html'], {base: './src/'}) .pipe(htmlmin({ collapseWhitespace: true })) - .pipe(dest('dist/')); + .pipe(dest('dist/')) + .pipe(browserSync.stream()); } function images() { return src(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], {base: './src/'}) .pipe(imagemin()) .pipe(dest('dist/')) + .pipe(browserSync.stream()); } function copy() { return src(['src/**/*.json', 'src/**/*.ico'], {base: './src/'}) .pipe(dest('dist/')) + .pipe(browserSync.stream()); } function injectBundle() { @@ -89,7 +108,8 @@ function injectBundle() { src(['src/scripts/apploader.js'], {read: false}, {base: './src/'}), {relative: true} )) .pipe(dest('dist/')) + .pipe(browserSync.stream()); } exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle) -exports.run = series(exports.default, setStandalone, devBrowser) +exports.serve = series(exports.default, setStandalone, serve) diff --git a/package.json b/package.json index 9360e55861..a98705b17a 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,13 @@ "gulp-htmlmin": "^5.0.1", "gulp-imagemin": "^7.1.0", "gulp-inject": "^5.0.5", + "gulp-mode": "^1.0.2", "gulp-postcss": "^8.0.0", + "gulp-sass": "^4.0.2", "gulp-sourcemaps": "^2.6.5", "gulp-terser": "^1.2.0", "html-webpack-plugin": "^3.2.0", + "node-sass": "^4.13.1", "style-loader": "^1.1.3", "stylelint": "^13.1.0", "stylelint-config-rational-order": "^0.1.2", diff --git a/webpack.dev.js b/webpack.dev.js index 81b69d896c..baa3120a4b 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -1,8 +1,6 @@ const path = require("path"); const common = require("./webpack.common"); const merge = require("webpack-merge"); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const ConcatPlugin = require('webpack-concat-plugin'); module.exports = merge(common, { mode: "development", @@ -28,15 +26,5 @@ module.exports = merge(common, { ] } ] - }, - plugins: [ - new HtmlWebpackPlugin({ - filename: 'index.html', - template: 'index.html' - }), - new ConcatPlugin({ - name: 'scripts/apploader.js', - filesToConcat: ['./standalone.js', './scripts/apploader.js'] - }) - ] + } }); diff --git a/yarn.lock b/yarn.lock index abd378534054cfdc90537855b064a6c65b678db0..a4d7070fd335640d177d827a8d571cbd73f311ee 100644 GIT binary patch delta 16771 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 delta 726 zcmWm9eN4@J90%}yzn{m66(j1OFl%ofYRNRqi$BmUS+9mV{#_Wy^rw1K$u}R#! zYOb;9Gd3%mHV;?Jy4Ra|ewc@5-J7|{)36~+(XK2OF8{v%d-b%&R_}^wobjgVdgni? zY0P+loJrB>n4X>}?RC!1AoA})8U zA6>AY)jYomEgxG@xIxm|DNCwjbt&$Q&^dm5n5J7s;^Yc_!9ggfpXbTp9vvlbH<@JF zazz^)zN+65GMe@4$;h)*6oJWJTFbZ=O*#G0mq_VhXiKBxN@p&?%v7pU^56%G!0z!> z6{YfJcQHj*U#v?;LpE*mVet|=qVRGVT_*9@Ia%1Ul01akAgwpB>*(=lgde2bp@=_6 z#|)lcp`&^7%Nz>e@enSzh>2r2qiYnq317$X0zyO@_p+o<wGOYvVRZ%UTCzne%@)pMl>@qe*LNz$L(ha&KA z;Zjy<1IWI_@eVd#;|dFJ3pa$J;T{juxYx!>ZhUR$Csr4QB&z(|=D>SC>oEmI!8L{X z-+zPTbup*lHaU@u_Atk%(CTt(;$>Vr`Q$)7C8H_T*_(k8Yn)&K${sr5Rw}d#Nai!g zi;m|`m&T2k&afDy8q@7ZN0J$?F(Ac!8i<5!li`-yT+@e}^UYufJqt~~3(+e~)+FTA znw|a8c*3-V;mjGc!w3Hz)0KgoC>s-p#tF8{pg3T!Yj~&H{Mp#E)4p<{a=)#KL(+Ns TB~cQ{X3F_T)`RjFwuJr%EA<(L