-
Notifications
You must be signed in to change notification settings - Fork 10.3k
/
Copy pathgatsby-node.js
85 lines (78 loc) · 1.63 KB
/
gatsby-node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
* Usage:
*
* // gatsby-config.js
* plugins: [
* `gatsby-plugin-stylus`,
* ],
*
* // Usage with options:
*
* // gatsby-config.js
* plugins: [
* {
* resolve: `gatsby-plugin-stylus`,
* options: {
* use: [],
* import: []
* },
* },
* ],
*/
const resolve = require(`./resolve`)
exports.onCreateWebpackConfig = (
{ actions, stage, loaders },
{ cssLoaderOptions = {}, postCssPlugins, ...stylusOptions }
) => {
const isSSR = [`develop-html`, `build-html`].includes(stage)
const { setWebpackConfig } = actions
const stylusLoader = {
loader: resolve(`stylus-loader`),
options: {
...stylusOptions,
},
}
const stylusRule = {
test: /\.styl$/,
use: isSSR
? [loaders.null()]
: [
loaders.miniCssExtract(),
loaders.css({
importLoaders: 2,
...cssLoaderOptions,
modules: false,
}),
loaders.postcss({ plugins: postCssPlugins }),
stylusLoader,
],
}
const stylusRuleModules = {
test: /\.module\.styl$/,
use: [
!isSSR &&
loaders.miniCssExtract({
modules: {
namedExport: cssLoaderOptions.modules?.namedExport ?? true,
},
}),
loaders.css({
...cssLoaderOptions,
importLoaders: 1,
modules: cssLoaderOptions.modules ?? true,
}),
loaders.postcss({ plugins: postCssPlugins }),
stylusLoader,
].filter(Boolean),
}
const configRules = [
{
oneOf: [stylusRuleModules, stylusRule],
},
]
setWebpackConfig({
module: {
rules: configRules,
},
})
}