mirror of
https://github.com/bitwarden/server.git
synced 2025-01-01 18:37:35 +01:00
[PM-10261] Migrate from gulp to webpack (#4569)
* Migrate from gulp to bootstrap * Remove auto build since it breaks tests
This commit is contained in:
parent
3cccb6fead
commit
f5c771a057
4
.github/renovate.json
vendored
4
.github/renovate.json
vendored
@ -41,9 +41,9 @@
|
|||||||
"reviewers": ["team:team-auth-dev"]
|
"reviewers": ["team:team-auth-dev"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"matchPackageNames": ["bootstrap", "del", "gulp"],
|
"matchPackageNames": ["bootstrap"],
|
||||||
"matchUpdateTypes": ["major"],
|
"matchUpdateTypes": ["major"],
|
||||||
"description": "Lock bootstrap, del, and gulp major versions due to ASP.NET conflicts",
|
"description": "Lock bootstrap major versions due to ASP.NET conflicts",
|
||||||
"enabled": false
|
"enabled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -205,12 +205,10 @@ mail_dist/
|
|||||||
src/Core/Properties/launchSettings.json
|
src/Core/Properties/launchSettings.json
|
||||||
*.override.env
|
*.override.env
|
||||||
**/*.DS_Store
|
**/*.DS_Store
|
||||||
src/Admin/wwwroot/lib
|
src/Admin/wwwroot/assets
|
||||||
src/Admin/wwwroot/css
|
|
||||||
.vscode/*
|
.vscode/*
|
||||||
**/.vscode/*
|
**/.vscode/*
|
||||||
bitwarden_license/src/Sso/wwwroot/lib
|
bitwarden_license/src/Sso/wwwroot/assets
|
||||||
bitwarden_license/src/Sso/wwwroot/css
|
|
||||||
.github/test/build.secrets
|
.github/test/build.secrets
|
||||||
**/CoverageOutput/
|
**/CoverageOutput/
|
||||||
.idea/*
|
.idea/*
|
||||||
|
@ -7,15 +7,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>@ViewData["Title"] - SSO</title>
|
<title>@ViewData["Title"] - SSO</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="~/css/webfonts.css" />
|
<link rel="stylesheet" href="~/assets/site.css" asp-append-version="true" />
|
||||||
<environment include="Development">
|
|
||||||
<link rel="stylesheet" href="~/lib/font-awesome/css/font-awesome.css" />
|
|
||||||
<link rel="stylesheet" href="~/css/site.css" />
|
|
||||||
</environment>
|
|
||||||
<environment exclude="Development">
|
|
||||||
<link rel="stylesheet" href="~/lib/font-awesome/css/font-awesome.min.css" asp-append-version="true" />
|
|
||||||
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
|
|
||||||
</environment>
|
|
||||||
@RenderSection("Head", required: false)
|
@RenderSection("Head", required: false)
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@ -43,18 +35,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<environment include="Development">
|
<script src="~/assets/site.js" asp-append-version="true"></script>
|
||||||
<script src="~/lib/jquery/jquery.slim.js"></script>
|
|
||||||
<script src="~/lib/popper/popper.js"></script>
|
|
||||||
<script src="~/lib/bootstrap/js/bootstrap.js"></script>
|
|
||||||
</environment>
|
|
||||||
<environment exclude="Development">
|
|
||||||
<script src="~/lib/jquery/jquery.slim.min.js" asp-append-version="true"></script>
|
|
||||||
<script src="~/lib/popper/popper.min.js" asp-append-version="true"></script>
|
|
||||||
<script src="~/lib/bootstrap/js/bootstrap.min.js" asp-append-version="true"></script>
|
|
||||||
</environment>
|
|
||||||
|
|
||||||
<script src="~/js/site.js" asp-append-version="true"></script>
|
|
||||||
@RenderSection("Scripts", required: false)
|
@RenderSection("Scripts", required: false)
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
/// <binding BeforeBuild='build' Clean='clean' ProjectOpened='build' />
|
|
||||||
|
|
||||||
const gulp = require('gulp');
|
|
||||||
const merge = require('merge-stream');
|
|
||||||
const sass = require('gulp-sass')(require("sass"));
|
|
||||||
const del = require('del');
|
|
||||||
|
|
||||||
const paths = {};
|
|
||||||
paths.webroot = './wwwroot/';
|
|
||||||
paths.npmDir = './node_modules/';
|
|
||||||
paths.sassDir = './Sass/';
|
|
||||||
paths.libDir = paths.webroot + 'lib/';
|
|
||||||
paths.cssDir = paths.webroot + 'css/';
|
|
||||||
paths.jsDir = paths.webroot + 'js/';
|
|
||||||
|
|
||||||
paths.sass = paths.sassDir + '**/*.scss';
|
|
||||||
paths.minCss = paths.cssDir + '**/*.min.css';
|
|
||||||
paths.js = paths.jsDir + '**/*.js';
|
|
||||||
paths.minJs = paths.jsDir + '**/*.min.js';
|
|
||||||
paths.libJs = paths.libDir + '**/*.js';
|
|
||||||
paths.libMinJs = paths.libDir + '**/*.min.js';
|
|
||||||
|
|
||||||
function clean() {
|
|
||||||
return del([paths.minJs, paths.cssDir, paths.libDir]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function lib() {
|
|
||||||
const libs = [
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'bootstrap/dist/js/*',
|
|
||||||
dest: paths.libDir + 'bootstrap/js'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'popper.js/dist/umd/*',
|
|
||||||
dest: paths.libDir + 'popper'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'font-awesome/css/*',
|
|
||||||
dest: paths.libDir + 'font-awesome/css'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'font-awesome/fonts/*',
|
|
||||||
dest: paths.libDir + 'font-awesome/fonts'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'jquery/dist/jquery.slim*',
|
|
||||||
dest: paths.libDir + 'jquery'
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const tasks = libs.map((lib) => {
|
|
||||||
return gulp.src(lib.src).pipe(gulp.dest(lib.dest));
|
|
||||||
});
|
|
||||||
return merge(tasks);
|
|
||||||
}
|
|
||||||
|
|
||||||
function runSass() {
|
|
||||||
return gulp.src(paths.sass)
|
|
||||||
.pipe(sass({ outputStyle: 'compressed' }).on('error', sass.logError))
|
|
||||||
.pipe(gulp.dest(paths.cssDir));
|
|
||||||
}
|
|
||||||
|
|
||||||
function sassWatch() {
|
|
||||||
gulp.watch(paths.sass, runSass);
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.build = gulp.series(clean, gulp.parallel([lib, runSass]));
|
|
||||||
exports['sass:watch'] = sassWatch;
|
|
||||||
exports.sass = runSass;
|
|
||||||
exports.lib = lib;
|
|
||||||
exports.clean = clean;
|
|
6718
bitwarden_license/src/Sso/package-lock.json
generated
6718
bitwarden_license/src/Sso/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -5,17 +5,21 @@
|
|||||||
"repository": "https://github.com/bitwarden/enterprise",
|
"repository": "https://github.com/bitwarden/enterprise",
|
||||||
"license": "-",
|
"license": "-",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "gulp build"
|
"build": "webpack"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"bootstrap": "4.6.2",
|
||||||
|
"font-awesome": "4.7.0",
|
||||||
|
"jquery": "3.7.1",
|
||||||
|
"popper.js": "1.16.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bootstrap": "4.6.2",
|
"css-loader": "7.1.2",
|
||||||
"del": "6.1.1",
|
"expose-loader": "5.0.0",
|
||||||
"font-awesome": "4.7.0",
|
"mini-css-extract-plugin": "2.9.0",
|
||||||
"gulp": "4.0.2",
|
"sass": "1.75.0",
|
||||||
"gulp-sass": "5.1.0",
|
"sass-loader": "16.0.0",
|
||||||
"jquery": "3.7.1",
|
"webpack": "5.93.0",
|
||||||
"merge-stream": "2.0.0",
|
"webpack-cli": "5.1.4"
|
||||||
"popper.js": "1.16.1",
|
|
||||||
"sass": "1.75.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
57
bitwarden_license/src/Sso/webpack.config.js
Normal file
57
bitwarden_license/src/Sso/webpack.config.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||||
|
|
||||||
|
const paths = {
|
||||||
|
assets: "./wwwroot/assets/",
|
||||||
|
sassDir: "./Sass/",
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @type {import("webpack").Configuration} */
|
||||||
|
module.exports = {
|
||||||
|
mode: "production",
|
||||||
|
devtool: "source-map",
|
||||||
|
entry: {
|
||||||
|
site: [
|
||||||
|
path.resolve(__dirname, paths.sassDir, "site.scss"),
|
||||||
|
|
||||||
|
"popper.js",
|
||||||
|
"bootstrap",
|
||||||
|
"jquery",
|
||||||
|
"font-awesome/css/font-awesome.css",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
clean: true,
|
||||||
|
path: path.resolve(__dirname, paths.assets),
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(sa|sc|c)ss$/,
|
||||||
|
use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
|
||||||
|
exclude: /loading(|-white).svg/,
|
||||||
|
generator: {
|
||||||
|
filename: "fonts/[name].[contenthash][ext]",
|
||||||
|
},
|
||||||
|
type: "asset/resource",
|
||||||
|
},
|
||||||
|
|
||||||
|
// Expose jquery globally so they can be used directly in asp.net
|
||||||
|
{
|
||||||
|
test: require.resolve("jquery"),
|
||||||
|
loader: "expose-loader",
|
||||||
|
options: {
|
||||||
|
exposes: ["$", "jQuery"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: "[name].css",
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
};
|
@ -1,4 +0,0 @@
|
|||||||
// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
|
||||||
// for details on configuring this project to bundle and minify static web assets.
|
|
||||||
|
|
||||||
// Write your JavaScript code.
|
|
@ -1,4 +1,4 @@
|
|||||||
@import "webfonts.css";
|
@import "webfonts.scss";
|
||||||
|
|
||||||
$primary: #175DDC;
|
$primary: #175DDC;
|
||||||
$primary-accent: #1252A3;
|
$primary-accent: #1252A3;
|
||||||
@ -17,7 +17,7 @@ $h4-font-size: 1rem;
|
|||||||
$h5-font-size: 1rem;
|
$h5-font-size: 1rem;
|
||||||
$h6-font-size: 1rem;
|
$h6-font-size: 1rem;
|
||||||
|
|
||||||
@import "../node_modules/bootstrap/scss/bootstrap.scss";
|
@import "bootstrap/scss/bootstrap.scss";
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
border-bottom: 1px solid $border-color;
|
border-bottom: 1px solid $border-color;
|
||||||
|
@ -27,17 +27,7 @@
|
|||||||
<meta name="robots" content="noindex,nofollow" />
|
<meta name="robots" content="noindex,nofollow" />
|
||||||
<title>@ViewData["Title"] - Bitwarden Admin Portal</title>
|
<title>@ViewData["Title"] - Bitwarden Admin Portal</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="~/css/webfonts.css" />
|
<link rel="stylesheet" href="~/assets/site.css" asp-append-version="true" />
|
||||||
<environment include="Development">
|
|
||||||
<link rel="stylesheet" href="~/lib/font-awesome/css/font-awesome.css" />
|
|
||||||
<link rel="stylesheet" href="~/css/site.css" />
|
|
||||||
<link rel="stylesheet" href="~/lib/toastr/toastr.css" />
|
|
||||||
</environment>
|
|
||||||
<environment exclude="Development">
|
|
||||||
<link rel="stylesheet" href="~/lib/font-awesome/css/font-awesome.min.css" asp-append-version="true" />
|
|
||||||
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
|
|
||||||
<link rel="stylesheet" href="~/lib/toastr/toastr.min.css" />
|
|
||||||
</environment>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
|
<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
|
||||||
@ -153,18 +143,7 @@
|
|||||||
© @DateTime.Now.Year, Bitwarden Inc.
|
© @DateTime.Now.Year, Bitwarden Inc.
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<environment include="Development">
|
<script src="~/assets/site.js" asp-append-version="true"></script>
|
||||||
<script src="~/lib/jquery/jquery.js"></script>
|
|
||||||
<script src="~/lib/popper/popper.js"></script>
|
|
||||||
<script src="~/lib/bootstrap/js/bootstrap.js"></script>
|
|
||||||
<script src="~/lib/toastr/toastr.min.js"></script>
|
|
||||||
</environment>
|
|
||||||
<environment exclude="Development">
|
|
||||||
<script src="~/lib/jquery/jquery.min.js" asp-append-version="true"></script>
|
|
||||||
<script src="~/lib/popper/popper.min.js" asp-append-version="true"></script>
|
|
||||||
<script src="~/lib/bootstrap/js/bootstrap.min.js" asp-append-version="true"></script>
|
|
||||||
<script src="~/lib/toastr/toastr.min.js" asp-append-version="true"></script>
|
|
||||||
</environment>
|
|
||||||
|
|
||||||
@if (TempData["Error"] != null)
|
@if (TempData["Error"] != null)
|
||||||
{
|
{
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
/// <binding BeforeBuild='build' Clean='clean' ProjectOpened='build' />
|
|
||||||
|
|
||||||
const gulp = require('gulp');
|
|
||||||
const merge = require('merge-stream');
|
|
||||||
const sass = require('gulp-sass')(require("sass"));
|
|
||||||
const del = require('del');
|
|
||||||
|
|
||||||
const paths = {};
|
|
||||||
paths.webroot = './wwwroot/';
|
|
||||||
paths.npmDir = './node_modules/';
|
|
||||||
paths.sassDir = './Sass/';
|
|
||||||
paths.libDir = paths.webroot + 'lib/';
|
|
||||||
paths.cssDir = paths.webroot + 'css/';
|
|
||||||
paths.jsDir = paths.webroot + 'js/';
|
|
||||||
|
|
||||||
paths.sass = paths.sassDir + '**/*.scss';
|
|
||||||
paths.minCss = paths.cssDir + '**/*.min.css';
|
|
||||||
paths.js = paths.jsDir + '**/*.js';
|
|
||||||
paths.minJs = paths.jsDir + '**/*.min.js';
|
|
||||||
paths.libJs = paths.libDir + '**/*.js';
|
|
||||||
paths.libMinJs = paths.libDir + '**/*.min.js';
|
|
||||||
|
|
||||||
function clean() {
|
|
||||||
return del([paths.minJs, paths.cssDir, paths.libDir]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function lib() {
|
|
||||||
const libs = [
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'bootstrap/dist/js/*',
|
|
||||||
dest: paths.libDir + 'bootstrap/js'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'popper.js/dist/umd/*',
|
|
||||||
dest: paths.libDir + 'popper'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'font-awesome/css/*',
|
|
||||||
dest: paths.libDir + 'font-awesome/css'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'font-awesome/fonts/*',
|
|
||||||
dest: paths.libDir + 'font-awesome/fonts'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'jquery/dist/jquery.*',
|
|
||||||
dest: paths.libDir + 'jquery'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.npmDir + 'toastr/build/*',
|
|
||||||
dest: paths.libDir + 'toastr'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: paths.sassDir + 'webfonts/*',
|
|
||||||
dest: paths.cssDir + 'webfonts'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const tasks = libs.map((lib) => {
|
|
||||||
return gulp.src(lib.src).pipe(gulp.dest(lib.dest));
|
|
||||||
});
|
|
||||||
return merge(tasks);
|
|
||||||
}
|
|
||||||
|
|
||||||
function runSass() {
|
|
||||||
return gulp.src(paths.sass)
|
|
||||||
.pipe(sass({ outputStyle: 'compressed' }).on('error', sass.logError))
|
|
||||||
.pipe(gulp.dest(paths.cssDir));
|
|
||||||
}
|
|
||||||
|
|
||||||
function sassWatch() {
|
|
||||||
gulp.watch(paths.sass, runSass);
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.build = gulp.series(clean, gulp.parallel([lib, runSass]));
|
|
||||||
exports['sass:watch'] = sassWatch;
|
|
||||||
exports.sass = runSass;
|
|
||||||
exports.lib = lib;
|
|
||||||
exports.clean = clean;
|
|
6715
src/Admin/package-lock.json
generated
6715
src/Admin/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -5,18 +5,22 @@
|
|||||||
"repository": "https://github.com/bitwarden/server",
|
"repository": "https://github.com/bitwarden/server",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "gulp build"
|
"build": "webpack"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"bootstrap": "4.6.2",
|
||||||
|
"font-awesome": "4.7.0",
|
||||||
|
"jquery": "3.7.1",
|
||||||
|
"popper.js": "1.16.1",
|
||||||
|
"toastr": "2.1.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bootstrap": "4.6.2",
|
"css-loader": "7.1.2",
|
||||||
"del": "6.1.1",
|
"expose-loader": "5.0.0",
|
||||||
"font-awesome": "4.7.0",
|
"mini-css-extract-plugin": "2.9.0",
|
||||||
"gulp": "4.0.2",
|
|
||||||
"gulp-sass": "5.1.0",
|
|
||||||
"jquery": "3.7.1",
|
|
||||||
"merge-stream": "2.0.0",
|
|
||||||
"popper.js": "1.16.1",
|
|
||||||
"sass": "1.75.0",
|
"sass": "1.75.0",
|
||||||
"toastr": "2.1.4"
|
"sass-loader": "16.0.0",
|
||||||
|
"webpack": "5.93.0",
|
||||||
|
"webpack-cli": "5.1.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
66
src/Admin/webpack.config.js
Normal file
66
src/Admin/webpack.config.js
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||||
|
|
||||||
|
const paths = {
|
||||||
|
assets: "./wwwroot/assets/",
|
||||||
|
sassDir: "./Sass/",
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @type {import("webpack").Configuration} */
|
||||||
|
module.exports = {
|
||||||
|
mode: "production",
|
||||||
|
devtool: "source-map",
|
||||||
|
entry: {
|
||||||
|
site: [
|
||||||
|
path.resolve(__dirname, paths.sassDir, "site.scss"),
|
||||||
|
|
||||||
|
"popper.js",
|
||||||
|
"bootstrap",
|
||||||
|
"jquery",
|
||||||
|
"font-awesome/css/font-awesome.css",
|
||||||
|
"toastr",
|
||||||
|
"toastr/build/toastr.css",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
clean: true,
|
||||||
|
path: path.resolve(__dirname, paths.assets),
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(sa|sc|c)ss$/,
|
||||||
|
use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
|
||||||
|
exclude: /loading(|-white).svg/,
|
||||||
|
generator: {
|
||||||
|
filename: "fonts/[name].[contenthash][ext]",
|
||||||
|
},
|
||||||
|
type: "asset/resource",
|
||||||
|
},
|
||||||
|
|
||||||
|
// Expose jquery and toastr globally so they can be used directly in asp.net
|
||||||
|
{
|
||||||
|
test: require.resolve("jquery"),
|
||||||
|
loader: "expose-loader",
|
||||||
|
options: {
|
||||||
|
exposes: ["$", "jQuery"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: require.resolve("toastr"),
|
||||||
|
loader: "expose-loader",
|
||||||
|
options: {
|
||||||
|
exposes: ["toastr"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: "[name].css",
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user