Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
babel-preset-env
Advanced tools
babel-preset-env is a smart preset that allows you to use the latest JavaScript without needing to micromanage which syntax transforms (and optionally, browser polyfills) are needed by your target environment(s). It automatically determines the Babel plugins and polyfills you need based on your supported environments.
Automatic Polyfilling
Automatically includes polyfills for the features you use based on your target environments. The 'useBuiltIns' option set to 'usage' ensures that only the necessary polyfills are included.
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
]
]
}
Targeting Specific Environments
Allows you to specify the environments you want to support. The 'targets' option lets you define the browsers or Node.js versions you want to transpile your code for.
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"browsers": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
}
]
]
}
Debugging
Enables debug mode to print useful information about the targets and plugins being used. This helps in understanding what transformations are being applied.
{
"presets": [
[
"@babel/preset-env",
{
"debug": true
}
]
]
}
@babel/preset-react is a Babel preset that includes plugins needed to transform React JSX syntax. It is specifically tailored for React applications, whereas babel-preset-env is more general-purpose.
@babel/preset-typescript is a Babel preset that allows Babel to transform TypeScript code into JavaScript. It focuses on TypeScript syntax, while babel-preset-env focuses on modern JavaScript features.
core-js is a library that provides polyfills for modern JavaScript features. While babel-preset-env can automatically include core-js polyfills based on usage, core-js itself is a standalone library for polyfilling.
Babel preset for all environments.
latest
)#7 - Use external data such as compat-table
to determine browser support. We should create PRs there when necessary.
We run the script build-data.js which creates plugins.json.
This should be straightforward to do in most cases. There might be cases were plugins should be split up more. Currently located at pluginFeatures.js.
latest
#14 - It won't include stage-x
plugins. env will support all plugins in what we consider the latest version of Javascript (by matching what we do in babel-preset-latest
).
If you are targeting IE 8 and Chrome 55 it will include all plugins required by IE 8 since you would need to support both still.
browsers
option like autoprefixer#19 - Use browserslist to also queries like > 1%, last 2 versions
.
$ npm install --save-dev babel-preset-env
.babelrc
targets
- an object of browsers/environment versions to support (ex: chrome, node, etc).The data for this is currently at: /data/plugins.json and being generated by /scripts/build-data.js using https://kangax.github.io/compat-table.
We would like help to make sure the data is correct! This just means usage/testing!
Currently: "chrome, edge, firefox, safari, node"
Some node features are >
6.5
.
browsers
(array/string) - an query to select browsers (ex: last 2 versions, > 5%).Note, browsers' results are overridden by explicit items from
targets
.
If your config is a js file, also do
"node": parseFloat(process.versions.node)
loose
(boolean) - Enable "loose" transformations for any plugins in this preset that allow them (Disabled by default).modules
- Enable transformation of ES6 module syntax to another module type (Enabled by default to "commonjs"
).
false
to not transform modules, or one of ["amd", "umd", "systemjs", "commonjs"]
.debug
(boolean) - console.log
out the targets and plugins being used as well as the version specified in /data/plugins.json
.{
"presets": [
["env", {
"targets": {
"chrome": 52,
"browsers": "last 2 safari versions"
},
"loose": true,
"modules": false
}]
]
}
// src
export class A {}
// default is to run all transforms
{
"presets": [
["env", {}]
]
}
// ...
var A = exports.A = function A() {
_classCallCheck(this, A);
};
// target chrome 52
{
"presets": [
["env", {
"targets": {
"chrome": 52
}
}]
]
}
// ...
class A {}
exports.A = A;
// target chrome 52 with webpack 2/rollup
{
"presets": [
["env", {
"targets": {
"chrome": 52
},
"modules": false
}]
]
}
// ...
export class A {}
// using browserslist
{
"presets": [
["env", {
"targets": {
"chrome": 52,
"browsers": ["last 2 versions", "safari 7"]
}
}]
]
}
// ...
export var A = function A() {
_classCallCheck(this, A);
};
debug: true
Using targets: {
"node": 6.5
}
Using plugins:
module: false
transform-exponentiation-operator {}
transform-async-to-generator {}
syntax-trailing-function-commas {}
babel-plugin-transform-object-rest-spread
and targeting node.js 6.5 or higherYou may get a SyntaxError: Unexpected token ...
error if using the object-rest-spread feature and targeting node.js 6.5 or higher.
This is a known issue at babel/babel#4074.
A simple workaround would be to re-enable the following plugins: babel-plugin-transform-es2015-destructuring
and babel-plugin-transform-es2015-parameters
.
FAQs
A Babel preset for each environment.
The npm package babel-preset-env receives a total of 533,094 weekly downloads. As such, babel-preset-env popularity was classified as popular.
We found that babel-preset-env demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.