Skip to content

Commit

Permalink
fixup to the webpack
Browse files Browse the repository at this point in the history
  • Loading branch information
jenbreese committed Sep 15, 2023
1 parent f270352 commit bbe6f3f
Show file tree
Hide file tree
Showing 2 changed files with 169 additions and 59 deletions.
33 changes: 24 additions & 9 deletions themes/stanford_basic/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,42 @@
"distAssets": "dist/assets"
},
"scripts": {
"build": "webpack --mode=development --display-error-details",
"build": "webpack --mode=development",
"publish": "webpack --mode=production",
"watch": "webpack --mode=development --watch",
"lint:js": "eslint -c .eslintrc 'src/js'",
"lint:sass": "sass-lint -c .sass-lint.yml '**/*.scss' -v -q -i 'vendor/**/*.scss, node_modules/**/*.scss'"
},
"devDependencies": {
"@babel/core": "^7.22.1",
"@babel/preset-env": "^7.22.4",
"assets-webpack-plugin": "^7.1.1",
"babel-loader": "^9.1.2",
"decanter": "github:SU-SWS/decanter#task/package-updates",
"postcss-preset-env": "^8.4.2",
"@babel/core": "^7.15.8",
"@babel/preset-env": "^7.15.8",
"@babel/polyfill": "^7.12.1",
"drupal-behaviors-loader": "^1.0.1",
"element-closest-polyfill": "^1.0.0",
"element-matches-polyfill": "^1.0.0",
"element-qsa-scope": "^1.1.0",
"es6-object-assign": "^1.1.0",
"auto-changelog": "^2.3.0",
"autoprefixer": "^10.4.14",
"babel-loader": "^9.1.3",
"caniuse-lite": "^1.0",
"css-loader": "^6.8.1",
"css-minimizer-webpack-plugin": "^5.0.1",
"decanter": "github:SU-SWS/decanter#task/package-updates",
"custom-event-polyfill": "^1.0",
"filemanager-webpack-plugin": "^8.0",
"html-webpack-plugin": "^5.5.3",
"mini-css-extract-plugin": "^2.7.6",
"node-pre-gyp": "^0.17.0",
"node-sass": "^9.0.0",
"postcss-loader": "^7.3.2",
"postcss-preset-env": "^8.4.2",
"sass-loader": "^13.3.1",
"postcss": "^8.4.27",
"postcss-loader": "^7.0",
"raw-loader": "^4.0.1",
"sass-lint": "^1.13",
"sass-loader": "^13.3.2",
"style-loader": "^3.3.3",
"twig-html-loader": "^0.1.9",
"webpack": "^5.88.2",
"webpack-assets-manifest": "^5.1",
"webpack-cli": "^5.1.4",
Expand Down
195 changes: 145 additions & 50 deletions themes/stanford_basic/webpack.config.js
Original file line number Diff line number Diff line change
@@ -1,70 +1,165 @@
const config = require("./src/config");
const Webpack = require("webpack");
const AssetsWebpackPlugin = require('assets-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("css-minimizer-webpack-plugin");
/* eslint-disable no-undef */
/**
* Decanter 6 - Webpack Configuration
*/

var webpackConfig = {
// Requires / Dependencies
const path = require('path');
const FileManagerPlugin = require('filemanager-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const WebpackAssetsManifest = require('webpack-assets-manifest');
const TerserPlugin = require('terser-webpack-plugin');

// Paths
const npmPackage = 'node_modules';
const srcDir = path.resolve(__dirname, 'src');
const outputDir = path.resolve(__dirname, 'dist');
// process.env.NODE_ENV is NOT set, so use the name of the npm script as the clue.
const devMode = process.env.npm_lifecycle_event !== 'publish';

// Module Exports.
module.exports = {
name: 's',
// Define the entry points for which webpack builds a dependency graph.
entry: {
"admin": ["/src/scss/admin/index.scss"],
"base": ["/src/js/base.js"],
"behaviors": ["/src/js/behaviors.js"],
"ckeditor": ["/src/scss/ckeditor.scss"],
"ckeditor5": ["/src/scss/ckeditor5.scss"],
"components": ["/src/scss/components/index.scss"],
"layout": ["/src/scss/layout/index.scss"],
"print": ["/src/scss/print/index.scss"],
"search-page": ["/src/scss/pages/search/index.scss"],
"state": ["/src/scss/state/index.scss"],
"theme": ["/src/scss/theme/index.scss"],
"user_login": ["/src/scss/admin/user_login.scss"],
"content/policy":["/src/scss/content/policy/index.scss"],
"admin": "/src/scss/admin/index.scss",
"base": "/src/js/base.js",
"behaviors": "/src/js/behaviors.js",
"ckeditor": "/src/scss/ckeditor.scss",
"ckeditor5": "/src/scss/ckeditor5.scss",
"components": "/src/scss/components/index.scss",
"layout": "/src/scss/layout/index.scss",
"print": "/src/scss/print/index.scss",
"search-page": "/src/scss/pages/search/index.scss",
"state": "/src/scss/state/index.scss",
"theme": "/src/scss/theme/index.scss",
"user_login": "/src/scss/admin/user_login.scss",
"content/policy":"/src/scss/content/policy/index.scss",
},
// Where should I output the assets.
output: {
path: config.distFolder,
filename: '[name].js',
publicPath: config.publicPath,
clean: true
path: path.resolve(__dirname, outputDir + '/js'),
clean: true,
assetModuleFilename: '../assets/[name][ext]'
},
// Allows for map files.
devtool: 'source-map',
resolve: {
alias: {
'./@fortawesome': path.resolve(__dirname, npmPackage, '@fortawesome'),
'basic-assets': path.resolve(__dirname, 'src/assets'),
'decanter-assets': path.resolve(__dirname, npmPackage, 'decanter/core/src/img'),
'fa-fonts': path.resolve(__dirname, npmPackage, '@fortawesome/fontawesome-free/webfonts')
}
},
// Optimizations that are triggered by production mode.
optimization: {
moduleIds: 'deterministic',
minimize: !devMode,
minimizer: [
new CssMinimizerPlugin(),
new TerserPlugin()
]
},
mode: config.isProd ? "production" : "development",
plugins: [
// A webpack plugin to manage files before or after the build.
// Used here to:
// - clean all generated files (js AND css) prior to building
// - copy generated files to the styleguide after building
// Copying to the styleguide must happen in this build because the 2 configs
// run asynchronously, and the kss build finishes before this build generates
// the assets that need to be copied.
// https://www.npmjs.com/package/filemanager-webpack-plugin
new FileManagerPlugin({
events: {
onStart: {
delete: [outputDir + '/**/*']
},
onEnd: {
copy: [
{
source: npmPackage + "/decanter/core/src/templates/**/*.twig",
destination: outputDir + "/templates/decanter/"
},
]
}
}
}),
// This plugin extracts CSS into separate files. It creates a CSS file per
// JS file which contains CSS. It supports On-Demand-Loading of CSS and
// SourceMaps.
// https://github.com/webpack-contrib/mini-css-extract-plugin
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: '../css/[name].css',
chunkFilename: '../css/[id].css'
}),
// This Webpack plugin will generate a JSON file that matches the original
// filename with the hashed version.
// https://github.com/webdeveric/webpack-assets-manifest
new WebpackAssetsManifest({
output: 'assets.json'
})
],
module: {
rules: [
// Apply babel ES6 compilation to JavaScript files.
{
test: /\.m?js$/,
exclude: /(node_modules)/,
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
},
}
},
// Apply Plugins to SCSS/SASS files.
{
test: /\.(sa|sc|c)ss$/,
test: /\.s[ac]ss$/,
use: [
config.isProd ? { loader: MiniCssExtractPlugin.loader } : 'style-loader',
'css-loader',
'postcss-loader',
'sass-loader'
],
MiniCssExtractPlugin.loader,
// CSS Loader. Generate sourceMaps.
{
loader: 'css-loader',
options: {
sourceMap: true,
url: true
}
},
// Post CSS. Run autoprefixer plugin.
{
loader: 'postcss-loader',
options: {
sourceMap: true
}
},
// SASS Loader. Add compile paths to include bourbon.
{
loader: 'sass-loader',
options: {
sassOptions: {
sourceMap: true,
lineNumbers: true,
outputStyle: 'nested',
precision: 10,
includePaths: [
path.resolve(__dirname, npmPackage, 'bourbon/core'),
path.resolve(__dirname, srcDir, 'scss'),
path.resolve(__dirname, npmPackage)
]
}
}
}
]
},
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader']
}
]
},
plugins: [
new AssetsWebpackPlugin({path: config.distFolder}),
new MiniCssExtractPlugin({
filename: '[name].css',
}),
],
optimization: {
minimizer: [
new OptimizeCSSAssetsPlugin(),
]
}

};

if (config.hmrEnabled) {
webpackConfig.plugins.push(new Webpack.HotModuleReplacementPlugin());
}
module.exports = webpackConfig;
};

0 comments on commit bbe6f3f

Please sign in to comment.