Enable live reloading for browsersync

This commit is contained in:
MrTimscampi 2020-02-28 09:01:22 +01:00
parent ac903b87e0
commit 4c6dfbf2c5
4 changed files with 718 additions and 55 deletions

View file

@ -1,6 +1,6 @@
'use strict'; 'use strict';
const { src, dest, series, parallel } = require('gulp'); const { src, dest, series, parallel, watch } = require('gulp');
const browserSync = require('browser-sync').create(); const browserSync = require('browser-sync').create();
const del = require('del'); const del = require('del');
const babel = require('gulp-babel'); const babel = require('gulp-babel');
@ -9,6 +9,11 @@ const terser = require('gulp-terser');
const htmlmin = require('gulp-htmlmin'); const htmlmin = require('gulp-htmlmin');
const imagemin = require('gulp-imagemin'); const imagemin = require('gulp-imagemin');
const sourcemaps = require('gulp-sourcemaps'); 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_stream = require('webpack-stream');
const webpack_config = require('./webpack.prod.js'); const webpack_config = require('./webpack.prod.js');
const inject = require('gulp-inject'); const inject = require('gulp-inject');
@ -16,13 +21,21 @@ const postcss = require('gulp-postcss');
const cssnano = require('cssnano'); const cssnano = require('cssnano');
const autoprefixer = require('autoprefixer'); const autoprefixer = require('autoprefixer');
function devBrowser() { function serve() {
browserSync.init({ browserSync.init({
server: { server: {
baseDir: "./dist" baseDir: "./dist"
}, },
port: 8080 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() { function setStandalone() {
@ -38,7 +51,7 @@ function clean() {
function javascript() { function javascript() {
return src(['src/**/*.js', '!src/bundle.js'], {base: './src/'}) return src(['src/**/*.js', '!src/bundle.js'], {base: './src/'})
.pipe(sourcemaps.init({loadMaps: true})) .pipe(mode.development(sourcemaps.init({loadMaps: true})))
.pipe(babel({ .pipe(babel({
presets: ['@babel/preset-env'] presets: ['@babel/preset-env']
})) }))
@ -46,41 +59,47 @@ function javascript() {
keep_fnames: true, keep_fnames: true,
mangle: false mangle: false
})) }))
.pipe(sourcemaps.write('.')) .pipe(mode.development(sourcemaps.write('.')))
.pipe(dest('dist/')); .pipe(dest('dist/'))
.pipe(browserSync.stream());;
} }
function webpack() { function webpack() {
return webpack_stream(webpack_config) return webpack_stream(webpack_config)
.pipe(dest('dist/')); .pipe(dest('dist/'))
.pipe(browserSync.stream());
} }
function css() { function css() {
return src('src/**/*.css', {base: './src/'}) return src('src/**/*.css', {base: './src/'})
.pipe(sourcemaps.init({loadMaps: true})) .pipe(mode.development(sourcemaps.init({loadMaps: true})))
.pipe(postcss([ .pipe(postcss([
autoprefixer(), autoprefixer(),
cssnano() cssnano()
])) ]))
.pipe(sourcemaps.write('.')) .pipe(mode.development(sourcemaps.write('.')))
.pipe(dest('dist/')); .pipe(dest('dist/'))
.pipe(browserSync.stream());
} }
function html() { function html() {
return src(['src/**/*.html', '!src/index.html'], {base: './src/'}) return src(['src/**/*.html', '!src/index.html'], {base: './src/'})
.pipe(htmlmin({ collapseWhitespace: true })) .pipe(htmlmin({ collapseWhitespace: true }))
.pipe(dest('dist/')); .pipe(dest('dist/'))
.pipe(browserSync.stream());
} }
function images() { function images() {
return src(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], {base: './src/'}) return src(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], {base: './src/'})
.pipe(imagemin()) .pipe(imagemin())
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream());
} }
function copy() { function copy() {
return src(['src/**/*.json', 'src/**/*.ico'], {base: './src/'}) return src(['src/**/*.json', 'src/**/*.ico'], {base: './src/'})
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream());
} }
function injectBundle() { function injectBundle() {
@ -89,7 +108,8 @@ function injectBundle() {
src(['src/scripts/apploader.js'], {read: false}, {base: './src/'}), {relative: true} src(['src/scripts/apploader.js'], {read: false}, {base: './src/'}), {relative: true}
)) ))
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream());
} }
exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle) 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)

View file

@ -22,10 +22,13 @@
"gulp-htmlmin": "^5.0.1", "gulp-htmlmin": "^5.0.1",
"gulp-imagemin": "^7.1.0", "gulp-imagemin": "^7.1.0",
"gulp-inject": "^5.0.5", "gulp-inject": "^5.0.5",
"gulp-mode": "^1.0.2",
"gulp-postcss": "^8.0.0", "gulp-postcss": "^8.0.0",
"gulp-sass": "^4.0.2",
"gulp-sourcemaps": "^2.6.5", "gulp-sourcemaps": "^2.6.5",
"gulp-terser": "^1.2.0", "gulp-terser": "^1.2.0",
"html-webpack-plugin": "^3.2.0", "html-webpack-plugin": "^3.2.0",
"node-sass": "^4.13.1",
"style-loader": "^1.1.3", "style-loader": "^1.1.3",
"stylelint": "^13.1.0", "stylelint": "^13.1.0",
"stylelint-config-rational-order": "^0.1.2", "stylelint-config-rational-order": "^0.1.2",

View file

@ -1,8 +1,6 @@
const path = require("path"); const path = require("path");
const common = require("./webpack.common"); const common = require("./webpack.common");
const merge = require("webpack-merge"); const merge = require("webpack-merge");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ConcatPlugin = require('webpack-concat-plugin');
module.exports = merge(common, { module.exports = merge(common, {
mode: "development", 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']
})
]
}); });

714
yarn.lock

File diff suppressed because it is too large Load diff