mirror of
https://github.com/nuxt/nuxt.git
synced 2025-02-19 23:21:09 +00:00
refactor(babel-preset-app): simplify babel preset config (#6087)
This commit is contained in:
parent
f6ca2c77ed
commit
2fc73cf119
@ -21,7 +21,7 @@ Usually, no additional configuration is required. If needed though, there is an
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
babel: {
|
babel: {
|
||||||
presets({ isServer }) {
|
presets(env, [ preset, options ]) {
|
||||||
return [
|
return [
|
||||||
[ "@nuxt/babel-preset-app", options ]
|
[ "@nuxt/babel-preset-app", options ]
|
||||||
]
|
]
|
||||||
@ -29,6 +29,10 @@ babel: {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`env` is an object which contains `envName` (`server`, `client`, `modern`) and all `nuxtEnv` properties (`isDev`, `isServer`, `isClient`, `isModern`, `isLegacy`)
|
||||||
|
|
||||||
|
`preset` is the preset package name `@nuxt/babel-preset-app`
|
||||||
|
|
||||||
`options` is an object with parameters, for example:
|
`options` is an object with parameters, for example:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
@ -37,11 +41,10 @@ const options = {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Below is a list of all available parameters:
|
Below is a list of all available `options` parameters:
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
* **buildTarget** - passed in through the Builder, either `"server"` or `"client"`
|
|
||||||
* **configPath** - [`@babel/preset-env` parameter](https://babeljs.io/docs/en/babel-preset-env#configpath)
|
* **configPath** - [`@babel/preset-env` parameter](https://babeljs.io/docs/en/babel-preset-env#configpath)
|
||||||
* **forceAllTransforms** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#forcealltransforms)' parameter
|
* **forceAllTransforms** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#forcealltransforms)' parameter
|
||||||
* **debug**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#debug)' parameter
|
* **debug**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#debug)' parameter
|
||||||
@ -50,9 +53,8 @@ Below is a list of all available parameters:
|
|||||||
* **exclude** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#exclude)' parameter
|
* **exclude** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#exclude)' parameter
|
||||||
* **ignoreBrowserslistConfig**, defaults to value of `modern` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#ignorebrowserslistconfig)' parameter
|
* **ignoreBrowserslistConfig**, defaults to value of `modern` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#ignorebrowserslistconfig)' parameter
|
||||||
* **include** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#include)' parameter
|
* **include** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#include)' parameter
|
||||||
* **jsx**, default truish, can be a an object passed as params to [@vue/babel-preset-jsx`](https://www.npmjs.com/package/@vue/babel-preset-jsx)
|
* **jsx**, default true, can be a an object passed as params to [@vue/babel-preset-jsx`](https://www.npmjs.com/package/@vue/babel-preset-jsx)
|
||||||
* **loose**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#loose)' parameter and also sets `loose=true` for `@babel/plugin-proposal-class-properties`
|
* **loose**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#loose)' parameter and also sets `loose=true` for `@babel/plugin-proposal-class-properties`
|
||||||
* **modern** passed by builder, either `true` or `false`
|
|
||||||
* **modules**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#modules)' parameter
|
* **modules**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#modules)' parameter
|
||||||
* **polyfills**, default `core-js@2: ['es6.array.iterator','es6.promise','es6.object.assign','es7.promise.finally']`, `core-js@3: ['es.array.iterator','es.promise','es.object.assign','es.promise.finally']`, more [in the corresponding repository](https://github.com/zloirock/core-js)
|
* **polyfills**, default `core-js@2: ['es6.array.iterator','es6.promise','es6.object.assign','es7.promise.finally']`, `core-js@3: ['es.array.iterator','es.promise','es.object.assign','es.promise.finally']`, more [in the corresponding repository](https://github.com/zloirock/core-js)
|
||||||
* **shippedProposals** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#shippedproposals)' parameter
|
* **shippedProposals** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#shippedproposals)' parameter
|
||||||
@ -69,14 +71,16 @@ There are [detailed docs](https://babeljs.io/docs/en/babel-preset-env#options) f
|
|||||||
export default {
|
export default {
|
||||||
build: {
|
build: {
|
||||||
babel: {
|
babel: {
|
||||||
presets({ isServer }) {
|
presets({ envName }) {
|
||||||
|
const envTargets = {
|
||||||
|
client: { browsers: ["last 2 versions"], ie: 11 },
|
||||||
|
server: { node: "current" },
|
||||||
|
}
|
||||||
return [
|
return [
|
||||||
[
|
[
|
||||||
"@nuxt/babel-preset-app",
|
"@nuxt/babel-preset-app",
|
||||||
{
|
{
|
||||||
targets: isServer
|
targets: envTargets[envName]
|
||||||
? { node: "current" }
|
|
||||||
: { browsers: ["last 2 versions"], ie: 11 }
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -98,12 +102,12 @@ yarn add --dev core-js@2 @babel/runtime-corejs2
|
|||||||
export default {
|
export default {
|
||||||
build: {
|
build: {
|
||||||
babel: {
|
babel: {
|
||||||
presets({ isServer }) {
|
// envName: server, client, modern
|
||||||
|
presets({ envName }) {
|
||||||
return [
|
return [
|
||||||
[
|
[
|
||||||
require.resolve('@nuxt/babel-preset-app'),
|
'@nuxt/babel-preset-app',
|
||||||
{
|
{
|
||||||
buildTarget: isServer ? 'server' : 'client',
|
|
||||||
corejs: { version: 3 }
|
corejs: { version: 3 }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -43,23 +43,20 @@ function getPolyfills (targets, includes, { ignoreBrowserslistConfig, configPath
|
|||||||
return includes.filter(item => isPluginRequired(builtInTargets, builtInsList[item]))
|
return includes.filter(item => isPluginRequired(builtInTargets, builtInsList[item]))
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = (context, options = {}) => {
|
module.exports = (api, options = {}) => {
|
||||||
const presets = []
|
const presets = []
|
||||||
const plugins = []
|
const plugins = []
|
||||||
|
|
||||||
const modern = options.modern === undefined
|
const envName = api.env()
|
||||||
? context.env('modern')
|
|
||||||
: Boolean(options.modern)
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
polyfills: userPolyfills,
|
polyfills: userPolyfills,
|
||||||
buildTarget,
|
|
||||||
loose = false,
|
loose = false,
|
||||||
debug = false,
|
debug = false,
|
||||||
useBuiltIns = 'usage',
|
useBuiltIns = 'usage',
|
||||||
modules = false,
|
modules = false,
|
||||||
spec,
|
spec,
|
||||||
ignoreBrowserslistConfig = modern,
|
ignoreBrowserslistConfig = envName === 'modern',
|
||||||
configPath,
|
configPath,
|
||||||
include,
|
include,
|
||||||
exclude,
|
exclude,
|
||||||
@ -76,23 +73,34 @@ module.exports = (context, options = {}) => {
|
|||||||
corejs = { version: Number(corejs) }
|
corejs = { version: Number(corejs) }
|
||||||
}
|
}
|
||||||
|
|
||||||
let { targets } = options
|
const defaultTargets = {
|
||||||
if (modern === true) {
|
server: { node: 'current' },
|
||||||
targets = { esmodules: true }
|
client: { ie: 9 },
|
||||||
} else if (targets === undefined && typeof buildTarget === 'string') {
|
modern: { esmodules: true }
|
||||||
targets = buildTarget === 'server' ? { node: 'current' } : { ie: 9 }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let polyfills
|
let { targets = defaultTargets[envName] } = options
|
||||||
if (modern === false && useBuiltIns === 'usage' && buildTarget === 'client') {
|
|
||||||
polyfills = getPolyfills(targets, userPolyfills || getDefaultPolyfills(corejs), {
|
// modern mode can only be { esmodules: true }
|
||||||
ignoreBrowserslistConfig,
|
if (envName === 'modern') {
|
||||||
configPath,
|
targets = defaultTargets.modern
|
||||||
corejs
|
}
|
||||||
})
|
|
||||||
|
const polyfills = []
|
||||||
|
|
||||||
|
if (envName === 'client' && useBuiltIns === 'usage') {
|
||||||
|
polyfills.push(
|
||||||
|
...getPolyfills(
|
||||||
|
targets,
|
||||||
|
userPolyfills || getDefaultPolyfills(corejs),
|
||||||
|
{
|
||||||
|
ignoreBrowserslistConfig,
|
||||||
|
configPath,
|
||||||
|
corejs
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
plugins.push([require('./polyfills-plugin'), { polyfills }])
|
plugins.push([require('./polyfills-plugin'), { polyfills }])
|
||||||
} else {
|
|
||||||
polyfills = []
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pass options along to babel-preset-env
|
// Pass options along to babel-preset-env
|
||||||
@ -132,7 +140,7 @@ module.exports = (context, options = {}) => {
|
|||||||
regenerator: useBuiltIns !== 'usage',
|
regenerator: useBuiltIns !== 'usage',
|
||||||
corejs: false,
|
corejs: false,
|
||||||
helpers: useBuiltIns === 'usage',
|
helpers: useBuiltIns === 'usage',
|
||||||
useESModules: buildTarget !== 'server',
|
useESModules: envName !== 'server',
|
||||||
absoluteRuntime
|
absoluteRuntime
|
||||||
}])
|
}])
|
||||||
|
|
||||||
|
@ -80,24 +80,26 @@ export default class WebpackBaseConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getBabelOptions () {
|
getBabelOptions () {
|
||||||
|
const envName = this.name
|
||||||
const options = {
|
const options = {
|
||||||
...this.buildContext.buildOptions.babel,
|
...this.buildContext.buildOptions.babel,
|
||||||
envName: this.name
|
envName
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.configFile !== false) {
|
if (options.configFile !== false) {
|
||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultPreset = [
|
const defaultPreset = [ require.resolve('@nuxt/babel-preset-app'), {} ]
|
||||||
require.resolve('@nuxt/babel-preset-app'),
|
|
||||||
{
|
|
||||||
buildTarget: this.isServer ? 'server' : 'client'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
if (typeof options.presets === 'function') {
|
if (typeof options.presets === 'function') {
|
||||||
options.presets = options.presets({ isServer: this.isServer }, defaultPreset)
|
options.presets = options.presets(
|
||||||
|
{
|
||||||
|
envName,
|
||||||
|
...this.nuxtEnv
|
||||||
|
},
|
||||||
|
defaultPreset
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!options.babelrc && !options.presets) {
|
if (!options.babelrc && !options.presets) {
|
||||||
|
Loading…
Reference in New Issue
Block a user