Skip to content

Commit 3840d32

Browse files
FLS-1473: webpack package update into v5
1 parent 0c41fc1 commit 3840d32

File tree

1 file changed

+61
-34
lines changed

1 file changed

+61
-34
lines changed

designer/webpack.config.js

Lines changed: 61 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@ const HtmlWebpackPlugin = require("html-webpack-plugin");
44
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
55
const CopyPlugin = require("copy-webpack-plugin");
66
const nodeExternals = require("webpack-node-externals");
7-
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
8-
.BundleAnalyzerPlugin;
7+
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
98
const autoprefixer = require("autoprefixer");
109

1110
const devMode = process.env.NODE_ENV !== "production";
1211
const prodMode = process.env.NODE_ENV === "production";
1312
const environment = prodMode ? "production" : "development";
1413
const logLevel = process.env.REACT_LOG_LEVEL || (prodMode ? "warn" : "debug");
1514
const reactEnvVariables = new webpack.DefinePlugin({
16-
["REACT_LOG_LEVEL"]: JSON.stringify(`${logLevel}`),
15+
["process.env.REACT_LOG_LEVEL"]: JSON.stringify(`${logLevel}`),
1716
});
1817
console.log("****************** building client ******************")
1918
console.log(`application entry : [${path.resolve(__dirname, "../digital-form-builder/designer/client", "index.tsx")}]\n`)
@@ -22,6 +21,32 @@ console.log(`application output : [${path.resolve(__dirname, "dist", "client")}]
2221
console.log(`application node_modules : [${path.resolve(__dirname, "../digital-form-builder/node_modules")}]\n`)
2322
console.log(`adapter application node_modules : [${path.resolve(__dirname, "../digital-form-builder-adapter/node_modules")}\n]`)
2423

24+
function fixGovukImports(url /*, prev */) {
25+
const n = url.replace(/\\/g, "/");
26+
const m = n.match(/(?:^|\/)node_modules\/govuk-frontend\/(.+)$/);
27+
if (m) {
28+
const suffix = m[1];
29+
if (
30+
suffix === "govuk/helpers/colour" ||
31+
suffix === "govuk/helpers/_colour.scss"
32+
) {
33+
return {
34+
file: require.resolve("govuk-frontend/govuk/helpers/_colour.scss"),
35+
};
36+
}
37+
if (suffix === "govuk/all.scss" || suffix === "govuk/all") {
38+
return { file: require.resolve("govuk-frontend/govuk/all.scss") };
39+
}
40+
return {
41+
file: path.join(
42+
path.dirname(require.resolve("govuk-frontend/package.json")),
43+
suffix
44+
),
45+
};
46+
}
47+
return null;
48+
}
49+
2550
const client = {
2651
target: "web",
2752
mode: environment,
@@ -37,34 +62,37 @@ const client = {
3762
},
3863
resolve: {
3964
extensions: [".js", ".jsx", ".ts", ".tsx"],
40-
modules: [
41-
path.resolve(__dirname, "../node_modules")
42-
],
43-
},
44-
node: {
45-
__dirname: false,
65+
modules: ["node_modules"],
66+
fallback: {
67+
fs: false,
68+
path: false,
69+
crypto: false,
70+
stream: false,
71+
},
4672
},
4773
devtool: "eval-cheap-module-source-map",
4874
module: {
4975
rules: [
76+
{
77+
test: /\.m?js$/,
78+
resolve: {
79+
fullySpecified: false,
80+
},
81+
},
5082
{
5183
test: /\.(js|jsx|tsx|ts)$/,
52-
exclude: [
53-
{
54-
test: /node_modules/,
55-
exclude: /pino/,
56-
},
57-
],
58-
loader: "babel-loader",
84+
exclude: (modulePath) =>
85+
/node_modules/.test(modulePath) && !/node_modules[\\/](pino)/.test(modulePath),
86+
use: {
87+
loader: "babel-loader",
88+
},
5989
},
6090
{
6191
test: /\.(sa|sc|c)ss$/,
6292
use: [
6393
{
6494
loader: MiniCssExtractPlugin.loader,
6595
options: {
66-
hmr: devMode,
67-
reloadAll: true,
6896
publicPath: "../../",
6997
},
7098
},
@@ -74,12 +102,19 @@ const client = {
74102
},
75103
{
76104
loader: "postcss-loader",
105+
options: {
106+
postcssOptions: {
107+
plugins: [autoprefixer()],
108+
},
109+
},
77110
},
78111
{
79112
loader: "sass-loader",
80113
options: {
114+
implementation: require("sass"),
81115
sassOptions: {
82116
outputStyle: "expanded",
117+
importer: fixGovukImports,
83118
},
84119
},
85120
},
@@ -111,12 +146,8 @@ const client = {
111146
hash: prodMode,
112147
}),
113148
new MiniCssExtractPlugin({
114-
filename: devMode
115-
? "assets/css/[name].css"
116-
: "assets/css/[name].[hash].css",
117-
chunkFilename: devMode
118-
? "assets/css/[id].css"
119-
: "assets/css/[id].[hash].css",
149+
filename: devMode ? "assets/css/[name].css" : "assets/css/[name].[contenthash].css",
150+
chunkFilename: devMode ? "assets/css/[id].css" : "assets/css/[id].[contenthash].css",
120151
}),
121152
new CopyPlugin({
122153
patterns: [
@@ -145,9 +176,7 @@ const server = {
145176
},
146177
resolve: {
147178
extensions: [".js", ".jsx", ".ts", ".tsx"],
148-
modules: [
149-
path.resolve(__dirname, "../node_modules")
150-
],
179+
modules: ["node_modules"],
151180
},
152181
node: {
153182
__dirname: false,
@@ -160,17 +189,15 @@ const server = {
160189
{
161190
test: /\.(js|jsx|tsx|ts)$/,
162191
exclude: /node_modules/,
163-
loader: "babel-loader",
192+
use: {
193+
loader: "babel-loader",
194+
},
164195
},
165196
],
166197
},
167198
externals: [
168-
nodeExternals({
169-
modulesDir: path.resolve(__dirname, "../digital-form-builder/node_modules"),
170-
}),
171-
nodeExternals({
172-
modulesDir: path.resolve(__dirname, "../digital-form-builder-adapter/node_modules"),
173-
}),
199+
nodeExternals(),
200+
{ fsevents: "commonjs fsevents" },
174201
],
175202
};
176203

0 commit comments

Comments
 (0)