forked from vuejs/vue-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpolyfillsPlugin.js
38 lines (33 loc) · 1014 Bytes
/
polyfillsPlugin.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
const { addSideEffect } = require('@babel/helper-module-imports')
// slightly modifiled from @babel/preset-env/src/utils
// use an absolute path for core-js modules, to fix conflicts of different core-js versions
function getModulePath (mod) {
if (mod === 'regenerator-runtime') {
return require.resolve('regenerator-runtime/runtime')
}
return require.resolve(`core-js/modules/${mod}`)
}
function createImport (path, mod) {
return addSideEffect(path, getModulePath(mod))
}
// add polyfill imports to the first file encountered.
module.exports = ({ types }, { entryFiles = [] }) => {
return {
name: 'vue-cli-inject-polyfills',
visitor: {
Program (path, state) {
if (!entryFiles.includes(state.filename)) {
return
}
const { polyfills } = state.opts
// imports are injected in reverse order
polyfills
.slice()
.reverse()
.forEach(p => {
createImport(path, p)
})
}
}
}
}