// gulpfile.js 'use strict'; const gulp = require('gulp'); const build = require('@microsoft/sp-build-web'); const merge = require('webpack-merge'); const TerserPlugin = require('terser-webpack-plugin-legacy'); build.addSuppression(/Warning - \[sass\] The local CSS class .* is not camelCase and will not be type-safe./gi); // force use of projects specified typescript version const typeScriptConfig = require('@microsoft/gulp-core-build-typescript/lib/TypeScriptConfiguration'); typeScriptConfig.TypeScriptConfiguration.setTypescriptCompiler(require('typescript')); // disable tslint build.tslint.enabled = false; const eslint = require('gulp-eslint'); const eslintSubTask = build.subTask('eslint', function (gulp, buildOptions, done) { return gulp.src(['src/**/*.{ts,tsx}']) // eslint() attaches the lint output to the "eslint" property // of the file object so it can be used by other modules. .pipe(eslint()) // eslint.format() outputs the lint results to the console. // Alternatively use eslint.formatEach() (see Docs). .pipe(eslint.format()) // To have the process exit with an error code (1) on // lint error, return the stream and pipe to failAfterError last. .pipe(eslint.failAfterError()); }); build.rig.addPreBuildTask(build.task('eslint-task', eslintSubTask)); // force use of projects specified react version build.configureWebpack.mergeConfig({ additionalConfiguration: (generatedConfiguration) => { // force use of projects specified react version generatedConfiguration.externals = generatedConfiguration.externals .filter(name => !(["react", "react-dom"].includes(name))); // force use TerserPlugIn (remove UglifyJs) generatedConfiguration.plugins.forEach((plugin, i) => { if (plugin.options && plugin.options.mangle) { generatedConfiguration.plugins.splice(i, 1); generatedConfiguration = merge(generatedConfiguration, { plugins: [ new TerserPlugin() ] }); } }); return generatedConfiguration; } }); build.initialize(gulp);