201 lines
5.6 KiB
JavaScript
201 lines
5.6 KiB
JavaScript
// import gulp from 'gulp';
|
|
import { task, src, dest, watch, parallel, series } from 'gulp';
|
|
|
|
// Allgemeine Module für Gulp
|
|
|
|
import plumber from 'gulp-plumber';
|
|
import sourcemaps from 'gulp-sourcemaps';
|
|
|
|
// SERVER =================================
|
|
import bs from 'browser-sync';
|
|
const browserSync = bs.create();
|
|
|
|
// https://browsersync.io/docs/gulp
|
|
// $ gulp server
|
|
task('server', () => {
|
|
browserSync.init({
|
|
server: {
|
|
baseDir: './',
|
|
},
|
|
// host: '127.0.0.1',
|
|
// localhost: false,
|
|
open: false,
|
|
port: 3000,
|
|
});
|
|
});
|
|
|
|
task('reload', (done) => {
|
|
browserSync.reload(); // Refresh der Seite
|
|
done();
|
|
});
|
|
|
|
// =================================
|
|
|
|
// CSS ==================================
|
|
|
|
import * as dartSass from 'sass';
|
|
import gulpSass from 'gulp-sass';
|
|
import autoPrefixer from 'gulp-autoprefixer';
|
|
|
|
const sass = gulpSass(dartSass);
|
|
|
|
// $ gulp css
|
|
task('css', (done) => {
|
|
// Updated path to look in dev/scss
|
|
const sourceFile = './dev/scss/main.scss';
|
|
const targetFolder = './assets/css';
|
|
|
|
src(sourceFile, { allowEmpty: true, sourcemaps: true })
|
|
.pipe(plumber()) // Falls ein Fehler entsteht, überspringe Fehlerabbruch
|
|
.pipe(
|
|
sass({
|
|
outputStyle: 'expanded',
|
|
sourceMap: false,
|
|
debug: true,
|
|
quietDeps: true, // Unix
|
|
silenceDeprecations: ['color-functions', 'global-builtin', 'import', 'legacy-js-api', 'abs-percent'],
|
|
}).on('error', sass.logError),
|
|
)
|
|
.pipe(autoPrefixer()) // fehlende prefixe im css werden gesetzt (-ms-, -o- -webkit-)
|
|
.pipe(dest(targetFolder, { sourcemaps: '../map' }));
|
|
|
|
done();
|
|
});
|
|
|
|
// ==================================
|
|
|
|
// JS bzw. TS ==================================
|
|
|
|
import rollupStream from '@rollup/stream';
|
|
import { babel } from '@rollup/plugin-babel'; // Plugin für rollup. JS Dateien werden über Babel direkt beim bundlen in "altes" JS über babel kompiliert
|
|
import { nodeResolve } from '@rollup/plugin-node-resolve'; // import Kurzschreibweise (suche Module im node_modules Ordner)
|
|
import commonJs from '@rollup/plugin-commonjs'; // commonjs module werden module (ES6) kompatibel gemacht
|
|
import source from 'vinyl-source-stream';
|
|
import buffer from 'vinyl-buffer';
|
|
import rollupReplace from '@rollup/plugin-replace'; // Umbenennung von Variablen in den Modulen möglich
|
|
import typescript from '@rollup/plugin-typescript'; // For TypeScript support needs "typescript" and "tslib"
|
|
|
|
// declare the cache variable outside of task scopes
|
|
let cache;
|
|
|
|
// $ gulp ts
|
|
task('ts', () => {
|
|
// Updated path to look in dev/scripts for a main.ts file
|
|
const sourceFile = './dev/scripts/main.ts';
|
|
const targetFolder = './assets/js';
|
|
|
|
return rollupStream({
|
|
input: sourceFile,
|
|
output: {
|
|
format: 'iife',
|
|
sourcemap: 'inline', // Enable inline sourcemap for gulp-sourcemaps
|
|
},
|
|
// define the cache in Rollup options
|
|
cache,
|
|
plugins: [
|
|
typescript(), // Added TypeScript plugin
|
|
rollupReplace({
|
|
'process.env.NODE_ENV': JSON.stringify('development'),
|
|
preventAssignment: true,
|
|
}),
|
|
nodeResolve(), // z.B. import _ from 'lodash' <- damit in "node_modules" nach Modul gesucht wird
|
|
commonJs({
|
|
include: 'node_modules/**',
|
|
}), // wenn require - commonJS Schreibweise vorliegt, wird es umgeschrieben, so dass import statement verwendet werden kann
|
|
babel({
|
|
presets: ['@babel/preset-env'], // ES6+ in altes JS umgewandelt
|
|
plugins: ['@babel/plugin-transform-runtime'], // kontrolliert, ob ein Modul bereits eingebunden und bindet es nicht erneut ein
|
|
babelHelpers: 'runtime',
|
|
compact: true,
|
|
extensions: ['.js', '.ts'], // Tell babel to process TS files
|
|
}),
|
|
],
|
|
})
|
|
.on('bundle', (bundle) => {
|
|
// update the cache after every new bundle is created
|
|
cache = bundle;
|
|
})
|
|
|
|
.pipe(source('build.js'))
|
|
.pipe(buffer())
|
|
.pipe(sourcemaps.init({ loadMaps: true }))
|
|
.pipe(
|
|
sourcemaps.write('../map', {
|
|
sourceRoot: '../dev/scripts',
|
|
}),
|
|
)
|
|
.pipe(dest(targetFolder));
|
|
});
|
|
|
|
// HTML =================================
|
|
import fileInclude from 'gulp-file-include';
|
|
task('html', (done) => {
|
|
const sourceFiles = ['./dev/html/pages/**/*.html', './dev/html/pages/*.html'];
|
|
const targetFolder = './';
|
|
|
|
src(sourceFiles)
|
|
.pipe(plumber())
|
|
.pipe(
|
|
fileInclude({
|
|
prefix: '@@',
|
|
basepath: './dev/html/includes',
|
|
}),
|
|
)
|
|
.pipe(dest(targetFolder));
|
|
|
|
done();
|
|
});
|
|
|
|
// === Watcher ======================
|
|
|
|
task('watcher', () => {
|
|
// Watcher for scss files in dev/scss
|
|
watch(['./dev/scss/**/*.+(scss|css)', './dev/scss/*.+(scss|css)'], series('css', 'reload'));
|
|
// Watcher for ts/js files in dev/scripts
|
|
watch(['./dev/scripts/**/*.ts', './dev/scripts/*.ts'], series('ts', 'reload'));
|
|
|
|
// Watcher for html files in dev/pages
|
|
watch(
|
|
[
|
|
'./dev/html/pages/**/*.html',
|
|
'./dev/html/pages/*.html',
|
|
'./dev/html/includes/**/*.html',
|
|
'./dev/html/includes/*.html',
|
|
],
|
|
series('html', 'reload'),
|
|
);
|
|
});
|
|
|
|
// ==== DEV MODE ====================
|
|
task('dev', series('css', 'ts', 'html', parallel('watcher', 'server')));
|
|
|
|
// ===================================
|
|
task('test', (done) => {
|
|
console.log('Test task executed');
|
|
done();
|
|
});
|
|
|
|
task('copy', (done) => {
|
|
src('package.json')
|
|
//.pipe(module())
|
|
.pipe(dest('./docs'));
|
|
|
|
console.log('Copy task executed');
|
|
done();
|
|
});
|
|
|
|
// gulp.task('test', (done) => {
|
|
// console.log('Test task executed');
|
|
// done();
|
|
// });
|
|
|
|
// gulp.task('copy', (done) => {
|
|
// gulp
|
|
// .src('package.json')
|
|
// //.pipe(module())
|
|
// .pipe(gulp.dest('./docs'));
|
|
|
|
// console.log('Copy task executed');
|
|
// done();
|
|
// });
|