-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
49 lines (44 loc) · 1.4 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
/**
* A webpack plugin to inject meta tag to Html.
* @author sevenschan
*/
class MetaInjectWebpackPlugin {
constructor (options) {
this.meta = options.meta
}
apply (compiler) {
if (compiler.hooks) {
// Webpack 4.x
compiler.hooks.compilation.tap('MetaInjectWebpack', (compilation) => {
if (compilation.hooks.htmlWebpackPluginBeforeHtmlProcessing) {
compilation.hooks.htmlWebpackPluginBeforeHtmlProcessing.tapAsync(
'htmlWebpackPluginBeforeHtmlProcessing',
(data, cb) => this.processData(data, cb)
)
}
})
} else {
// Webpack 3.x
compilation.plugin(
'html-webpack-plugin-before-html-processing',
(data, cb) => this.processData(data, cb)
)
}
}
processData (data, cb) {
const res = []
this.meta.forEach(e => res.push(this.makeTag(e)))
data.html = data.html.replace('</head>', res.join(' ') + '</head>')
cb(null, data)
}
makeTag (obj) {
if (typeof obj === 'string') return obj
let res = '<meta'
Object.keys(obj).forEach(e => {
res += ` ${e}="${obj[e]}"`
})
res += ' >'
return res
}
}
module.exports = MetaInjectWebpackPlugin