Skip to content

Commit 2cbabe1

Browse files
committed
feat(webpack-config): consolidate js loaders into one
BREAKING CHANGE: esbuild upgrade eliminated loader option and can consolidate js loader api into one
1 parent 9107125 commit 2cbabe1

File tree

4 files changed

+163
-257
lines changed

4 files changed

+163
-257
lines changed

packages/webpack-config/README.md

-3
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,6 @@ const { baseParts } = require('@waldronmatt/webpack-config');
124124
- `baseParts.setStyleOutputPath({})`
125125
- `baseParts.loadSourceMaps({})`
126126
- `baseParts.loadJS({})`
127-
- `baseParts.loadJSX({})`
128-
- `baseParts.loadTS({})`
129-
- `baseParts.loadTSX({})`
130127
- `baseParts.enableTypeChecking({})`
131128
- `baseParts.setScriptOutputPath({})`
132129
- `baseParts.loadImagesAsFiles({})`

packages/webpack-config/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"homepage": "https://github.com/waldronmatt/shareable-configs/tree/main/packages/webpack-config#readme",
3131
"dependencies": {
3232
"css-loader": "^6.7.1",
33-
"esbuild-loader": "^2.20.0",
33+
"esbuild-loader": "^3.0.1",
3434
"fork-ts-checker-webpack-plugin": "^7.2.13",
3535
"mini-css-extract-plugin": "^2.6.1",
3636
"postcss-loader": "^7.0.1",

packages/webpack-config/src/webpack.parts.js

+10-99
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,12 @@ const parts = (isProduction, env) => {
2222
];
2323

2424
/**
25-
* Loads CSS files.
25+
* Load `.css` files.
2626
*
2727
* `MiniCssExtractPlugin.loader` for `production` builds
2828
*
2929
* `style-loader` for `development` builds
3030
*
31-
* `css-loader`
32-
*
33-
* `postcss-loader`
34-
*
3531
* @param {array} include
3632
* @param {array} exclude
3733
*/
@@ -49,18 +45,12 @@ const parts = (isProduction, env) => {
4945
});
5046

5147
/**
52-
* Loads Sass files.
48+
* Load `.scss` files.
5349
*
5450
* `MiniCssExtractPlugin.loader` for `production` builds
5551
*
5652
* `style-loader` for `development` builds
5753
*
58-
* `css-loader`
59-
*
60-
* `postcss-loader`
61-
*
62-
* `sass-loader`
63-
*
6454
* @param {array} include
6555
* @param {array} exclude
6656
*/
@@ -118,35 +108,12 @@ const parts = (isProduction, env) => {
118108
});
119109

120110
/**
121-
* Load `.js` files.
111+
* Load `.js` / `.ts` files.
122112
*
123-
* @param {string} target
124-
*
125-
* set to `es2015` by default
126-
*
127-
* @param {array} include
128-
* @param {array} exclude
129-
*/
130-
module.exports.loadJS = ({ target = 'es2015', include, exclude }) => ({
131-
module: {
132-
rules: [
133-
{
134-
test: /\.js$/,
135-
include,
136-
exclude,
137-
// eslint-disable-next-line sonarjs/no-duplicate-string
138-
loader: 'esbuild-loader',
139-
options: {
140-
// eslint-disable-next-line object-shorthand
141-
target: target,
142-
},
143-
},
144-
],
145-
},
146-
});
147-
148-
/**
149-
* Load `.jsx` files.
113+
* `js`
114+
* `ts`
115+
* `jsx`
116+
* `tsx`
150117
*
151118
* @param {string} target
152119
*
@@ -155,72 +122,15 @@ const parts = (isProduction, env) => {
155122
* @param {array} include
156123
* @param {array} exclude
157124
*/
158-
module.exports.loadJSX = ({ target = 'es2015', include, exclude }) => ({
159-
module: {
160-
rules: [
161-
{
162-
test: /\.jsx$/,
163-
include,
164-
exclude,
165-
loader: 'esbuild-loader',
166-
options: {
167-
loader: 'jsx',
168-
// eslint-disable-next-line object-shorthand
169-
target: target,
170-
},
171-
},
172-
],
173-
},
174-
});
175-
176-
/**
177-
* Load `.ts` files with type checking on `development` builds.
178-
*
179-
* @param {string} target
180-
*
181-
* set to `es2015` by default
182-
*
183-
* @param {array} include
184-
* @param {array} exclude
185-
*/
186-
module.exports.loadTS = ({ target = 'es2015', include, exclude }) => ({
187-
module: {
188-
rules: [
189-
{
190-
test: /\.ts$/,
191-
include,
192-
exclude,
193-
loader: 'esbuild-loader',
194-
options: {
195-
loader: 'ts',
196-
// eslint-disable-next-line object-shorthand
197-
target: target,
198-
},
199-
},
200-
],
201-
},
202-
});
203-
204-
/**
205-
* Load `.tsx` files with type checking on `development` builds.
206-
*
207-
* @param {string} target
208-
*
209-
* set to `es2015` by default
210-
*
211-
* @param {array} include
212-
* @param {array} exclude
213-
*/
214-
module.exports.loadTSX = ({ target = 'es2015', include, exclude }) => ({
125+
module.exports.loadJS = ({ target = 'es2015', include, exclude }) => ({
215126
module: {
216127
rules: [
217128
{
218-
test: /\.tsx$/,
129+
test: /\.[jt]sx?$/,
219130
include,
220131
exclude,
221132
loader: 'esbuild-loader',
222133
options: {
223-
loader: 'tsx',
224134
// eslint-disable-next-line object-shorthand
225135
target: target,
226136
},
@@ -233,6 +143,7 @@ const parts = (isProduction, env) => {
233143
* Enable TypeScript checking for development builds.
234144
*/
235145
module.exports.enableTypeChecking = () => ({
146+
// eslint-disable-next-line unicorn/no-negated-condition
236147
plugins: [!isProduction ? new ForkTsCheckerWebpackPlugin() : false].filter(
237148
Boolean
238149
),

0 commit comments

Comments
 (0)