babel-plugin-transform-decorators-legacy weekly downloads statistics
By loganfsmyth · npm · Babel plugins
A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5.
babel-plugin-transform-decorators-legacy has 52,594 recorded weekly downloads on npm, a decrease of 42.0% over the past 30 days, ranking #581 of 2,322 tracked listings.
About babel-plugin-transform-decorators-legacy
Babel Legacy Decorator plugin
This is a plugin for Babel 6 that is meant to replicate the old decorator behavior from Babel 5 in order to allow people to more easily transition to Babel 6 without needing to be blocked on updates to the decorator proposal or for Babel to re-implement it.
Babel >= 7.x
This plugin is specifically for Babel 6.x. If you're using Babel 7, this plugin is not for you.
Babel 7's @babel/plugin-proposal-decorators officially supports the same logic that this
plugin has, but integrates better with Babel 7's other plugins. You can enable this with
{
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }],
]
}
in your Babel configuration. Note that legacy: true is specifically needed if you
want to get the same behavior as transform-decorators-legacy because there
are newer versions of the decorator specification coming out, and they do not
behave the same way as this plugin does.
Installation & Usage
$ npm install --save-dev babel-plugin-transform-decorators-legacy
Add the following line to your .babelrc file:
{
"plugins": ["transform-decorators-legacy"]
}
NOTE: Order of Plugins Matters!
If you are including your plugins manually and using transform-class-properties, make sure that transform-decorators-legacy comes before transform-class-properties.
/// WRONG
"plugins": [
"transform-class-properties",
"transform-decorators-legacy"
]
// RIGHT
"plugins": [
"transform-decorators-legacy",
"transform-class-properties"
]
Why "legacy"?
Decorators are still only a relatively new proposal, and they are (at least currently) still in flux. Many people have started to use them in their original form, where each decorator is essentially a function of the form
function(target, property, descriptor){}
This form is very likely to change moving forward, and Babel 6 did not wish to support the older form when it was known that it would change in the future. As such, I created this plugin to help people transition to Babel 6 without requiring them to drop their decorators or requiring them to wait for the new proposal update and then update all their code.
Best Effort
This plugin is a best effort to be compatible with Babel 5's transpiler output, but there are a few things that were difficult to reproduce, and a few things that were simply incorrect in Babel 5 with respect to the decorators proposal.
Two main things to mention as differences, though not things you are likely to encounter:
-
Decorators expressions are evaluated top to bottom, and executed bottom to top. e.g.
function dec(id){ console.log('evaluated', id); return (target, property, descriptor) => console.log('executed', id); } class Example { @dec(1) @dec(2) method(){} }In Babel 5, this would output:
evaluated 2 evaluated 1 executed 2 executed 1With this plugin, it will result in:
evaluated 1 evaluated 2 executed 2 executed 1which is what the spec dictates as the correct behavior and was incorrect in Babel 5.
-
Static class property initializers are evaluated once up front.
If you decorate a static class property, you will get a descriptor with an
initializerproperty. However whereas with Babel 5 this could be re-executed multiple times with potentially differing results,decorators-legacywill precompute the value and return an initializer that will return that value. e.g.function dec(target, prop, descriptor){ let {initializer} = descriptor; delete descriptor.initializer; delete descriptor.writable; descriptor.get = function(){ return initializer.call(this); }; } var i = 0; class Example { @dec static prop = i++; }In Babel 5, every access to
propwould incrementi. In Babel 6, the very first value ofiwill be cached for futureinitializercalls.The spec is a little vague around how initializers work for repeat calls, and I'd consider calling an
initializermultiple times to be a mistake in general, so hopefully this will not cause anyone trouble.
License
MIT (c) 2015
Description from the npm listing.
- babel
- babel-plugin
- es7
- decorators
README badge
Show your rank in a README or on your website. The badge updates automatically.
Charts
Images: 30d · 1y · all time · 1600×900 dark
Adoption over time
7/30/90-day growth
Ranking history
Listing placement
Listing placement
Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.
Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.
Recent observations
Full history (544)Similar npm Babel plugins plugins
All 20 babel-plugin-transform-decorators-legacy alternativesData source
Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.
Listing: https://www.npmjs.com/package/babel-plugin-transform-decorators-legacy. First seen Oct 16, 2026; last successful collection Oct 20, 2026. See the methodology.