-
-
Notifications
You must be signed in to change notification settings - Fork 110
/
plugins.js
106 lines (99 loc) · 4.07 KB
/
plugins.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import htmPlugin from '../plugins/htm-plugin.js';
import sucrasePlugin from '../plugins/sucrase-plugin.js';
import wmrPlugin from '../plugins/wmr/plugin.js';
import wmrStylesPlugin from '../plugins/wmr/styles/styles-plugin.js';
import sassPlugin from '../plugins/sass-plugin.js';
import npmPlugin from '../plugins/npm-plugin/index.js';
import publicPathPlugin from '../plugins/public-path-plugin.js';
import minifyCssPlugin from '../plugins/minify-css-plugin.js';
import htmlEntriesPlugin from '../plugins/html-entries-plugin.js';
import aliasPlugin from '../plugins/aliases-plugin.js';
import processGlobalPlugin from '../plugins/process-global-plugin.js';
import urlPlugin from '../plugins/url-plugin.js';
import resolveExtensionsPlugin from '../plugins/resolve-extensions-plugin.js';
import fastCjsPlugin from '../plugins/fast-cjs-plugin.js';
import bundlePlugin from '../plugins/bundle-plugin.js';
import jsonPlugin from '../plugins/json-plugin.js';
import optimizeGraphPlugin from '../plugins/optimize-graph-plugin.js';
import externalUrlsPlugin from '../plugins/external-urls-plugin.js';
import copyAssetsPlugin from '../plugins/copy-assets-plugin.js';
import nodeBuiltinsPlugin from '../plugins/node-builtins-plugin.js';
import dynamicImportVars from '@rollup/plugin-dynamic-import-vars';
import visualizer from 'rollup-plugin-visualizer';
import { defaultLoaders } from './default-loaders.js';
import { importAssertionPlugin } from '../plugins/import-assertion.js';
import { acornDefaultPlugins } from './acorn-default-plugins.js';
import { prefreshPlugin } from '../plugins/preact/prefresh.js';
import { absolutePathPlugin } from '../plugins/absolute-path-plugin.js';
import { lessPlugin } from '../plugins/less-plugin.js';
/**
* @param {import("wmr").Options} options
* @returns {import("wmr").Plugin[]}
*/
export function getPlugins(options) {
const { plugins, publicPath, alias, root, env, minify, mode, sourcemap, features, visualize } = options;
// Plugins are pre-sorted
let split = plugins.findIndex(p => p.enforce === 'post');
if (split === -1) split = plugins.length;
const production = mode === 'build';
const mergedAssets = new Set();
return [
acornDefaultPlugins(),
...plugins.slice(0, split),
features.preact && !production && prefreshPlugin({ sourcemap }),
production && htmlEntriesPlugin({ root, publicPath, mergedAssets, sourcemap }),
externalUrlsPlugin(),
nodeBuiltinsPlugin({ production }),
urlPlugin({ inline: !production, root, alias }),
jsonPlugin({ root }),
bundlePlugin({ inline: !production, cwd: root }),
absolutePathPlugin({ root }),
aliasPlugin({ alias }),
sucrasePlugin({
typescript: true,
sourcemap,
production
}),
// Transpile import assertion syntax to WMR prefixes
importAssertionPlugin({ sourcemap }),
production &&
(dynamicImportVars.default || dynamicImportVars)({
include: /\.(m?jsx?|tsx?)$/,
exclude: /\/node_modules\//
}),
production && publicPathPlugin({ publicPath }),
sassPlugin({ production, sourcemap, root, mergedAssets }),
lessPlugin({ sourcemap, mergedAssets, alias }),
wmrStylesPlugin({ hot: !production, root, production, alias, sourcemap }),
processGlobalPlugin({
sourcemap,
env,
NODE_ENV: production ? 'production' : 'development'
}),
htmPlugin({ production, sourcemap: options.sourcemap }),
wmrPlugin({ hot: !production, sourcemap: options.sourcemap }),
fastCjsPlugin({
// Only transpile CommonJS in node_modules and explicit .cjs files:
include: /(^npm\/|[/\\]node_modules[/\\]|\.cjs$)/
}),
production && npmPlugin({ external: false }),
resolveExtensionsPlugin({
extensions: ['.ts', '.tsx', '.js', '.cjs'],
index: true
}),
...plugins.slice(split),
// Apply default loaders to unprefixed paths
defaultLoaders(),
production && optimizeGraphPlugin({ publicPath }),
minify && minifyCssPlugin({ sourcemap }),
production && copyAssetsPlugin({ root, mergedAssets }),
production &&
visualize &&
(visualizer.default || visualizer)({
// Don't open in unit tests
open: process.env.NODE_ENV !== 'test',
gzipSize: true,
brotliSize: true
})
].filter(Boolean);
}