-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathindex.js
109 lines (100 loc) · 2.53 KB
/
index.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
107
108
109
const path = require('path')
const presets = {
antd: {
plugins: [
'isSameOrBefore',
'isSameOrAfter',
'advancedFormat',
'customParseFormat',
'weekday',
'weekYear',
'weekOfYear',
'isMoment',
'localeData',
'localizedFormat',
],
replaceMoment: true
},
antdv3: {
plugins: [
'isSameOrBefore',
'isSameOrAfter',
'advancedFormat',
'customParseFormat',
'weekday',
'weekYear',
'weekOfYear',
'isMoment',
'localeData',
'localizedFormat',
'badMutable'
],
replaceMoment: true
}
}
const makeEntry = (entry, initEntry) => {
if (typeof entry === "object" && !Array.isArray(entry)) {
Object.keys(entry).forEach(e => {
entry[e] = makeEntry(entry[e], initEntry);
});
return entry;
}
if (typeof entry === "string") {
return [initEntry, entry];
}
if (Array.isArray(entry)) {
return [initEntry].concat(entry);
}
if (typeof entry === "function") {
return async () => {
const originalEntry = await entry();
return makeEntry(originalEntry, initEntry);
};
}
}
class WebpackDayjsPlugin {
constructor(options = { preset: 'antd' }) {
const { preset, plugins, replaceMoment } = options;
if (preset && presets[preset]) {
this.plugins = presets[preset].plugins
this.replaceMoment = presets[preset].replaceMoment
}
if (plugins) this.plugins = plugins
if (replaceMoment !== undefined) this.replaceMoment = replaceMoment
}
apply(compiler) {
// add init dayjs entry and loader
if (this.plugins) {
const { entry, module } = compiler.options
const initLoaderRule = {
test: /init-dayjs-webpack-plugin-entry\.js$/,
use: [{
loader: path.resolve(__dirname, './init-loader.js'),
options: {
plugins: this.plugins
}
}]
}
if (module.rules) {
module.rules.push(initLoaderRule)
} else {
compiler.options.module.rules = [initLoaderRule]
}
const initFilePath = path.resolve(__dirname, 'init-dayjs-webpack-plugin-entry.js')
const initEntry = require.resolve(initFilePath)
compiler.options.entry = makeEntry(entry, initEntry)
}
// set dayjs alias
if (this.replaceMoment) {
const { alias } = compiler.options.resolve
if (alias) {
alias.moment = 'dayjs'
} else {
compiler.options.resolve.alias = {
moment: 'dayjs'
}
}
}
}
}
module.exports = WebpackDayjsPlugin