diff --git a/packages/@vue/babel-preset-app/README.md b/packages/@vue/babel-preset-app/README.md index 282450f815..1eee72c66e 100644 --- a/packages/@vue/babel-preset-app/README.md +++ b/packages/@vue/babel-preset-app/README.md @@ -50,3 +50,7 @@ This is the default Babel preset used in all Vue CLI projects. - **jsx** Default: `true`. Set to `false` to disable JSX support. + +- **loose** + + Default: `false`. Setting this to `true` will generate code that is more performant but less spec-compliant. diff --git a/packages/@vue/babel-preset-app/index.js b/packages/@vue/babel-preset-app/index.js index 4a3adebbbb..9b53437de9 100644 --- a/packages/@vue/babel-preset-app/index.js +++ b/packages/@vue/babel-preset-app/index.js @@ -14,12 +14,20 @@ module.exports = (context, options = {}) => { ) } + const { + loose = false, + useBuiltIns = 'usage', + modules = false, + targets, + decoratorsLegacy + } = options + const envOptions = { - modules: options.modules || false, - targets: options.targets, - useBuiltIns: typeof options.useBuiltIns === 'undefined' ? 'usage' : options.useBuiltIns + loose, + modules, + targets, + useBuiltIns } - delete envOptions.jsx // target running node version (this is set by unit testing plugins) if (process.env.VUE_CLI_BABEL_TARGET_NODE) { envOptions.targets = { node: 'current' } @@ -37,8 +45,9 @@ module.exports = (context, options = {}) => { // stage 2. This includes some important transforms, e.g. dynamic import // and rest object spread. presets.push([require('@babel/preset-stage-2'), { - useBuiltIns: true, - decoratorsLegacy: options.decoratorsLegacy !== false + loose, + useBuiltIns: useBuiltIns !== false, + decoratorsLegacy: decoratorsLegacy !== false }]) // transform runtime, but only for helpers