You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
43 lines
1.3 KiB
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 |
|
// TODO: remove the `useAbsolutePath` option in v5, |
|
// because `core-js` is sure to be present in newer projects; |
|
// we only need absolute path for babel runtime helpers, not for polyfills |
|
function getModulePath (mod, useAbsolutePath) { |
|
const modPath = |
|
mod === 'regenerator-runtime' |
|
? 'regenerator-runtime/runtime' |
|
: `core-js/modules/${mod}` |
|
return useAbsolutePath ? require.resolve(modPath) : modPath |
|
} |
|
|
|
function createImport (path, mod, useAbsolutePath) { |
|
return addSideEffect(path, getModulePath(mod, useAbsolutePath)) |
|
} |
|
|
|
// add polyfill imports to the first file encountered. |
|
module.exports = ( |
|
{ types }, |
|
{ polyfills, entryFiles = [], useAbsolutePath } |
|
) => { |
|
return { |
|
name: 'vue-cli-inject-polyfills', |
|
visitor: { |
|
Program (path, state) { |
|
if (!entryFiles.includes(state.filename)) { |
|
return |
|
} |
|
|
|
// imports are injected in reverse order |
|
polyfills |
|
.slice() |
|
.reverse() |
|
.forEach(p => { |
|
createImport(path, p, useAbsolutePath) |
|
}) |
|
} |
|
} |
|
} |
|
}
|
|
|