New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP Post #1014

Merged
merged 12 commits into from Dec 7, 2016

Conversation

@hzoo
Member

hzoo commented Nov 30, 2016

Might want to view the rendered form

Still WIP but wanted feedback on the generic topics covered, edits

Many TODOs 馃槄

  • team/project health
  • contributing: rfcs, governance, etc
  • where to contribute
  • explain each section more for those without the context
  • plugin ecosystem (how we can help)
  • speed (of parser, individual plugins, general transformation, generator)
Show outdated Hide outdated _posts/2016-11-29-future.md
## Project Maintenance
Maintaining any large open source project could deserve it's own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

it's >> its

@DrewML

DrewML Nov 30, 2016

Member

it's >> its

Show outdated Hide outdated _posts/2016-11-29-future.md
Maintaining any large open source project could deserve it's own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.
Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member
  • it's >> its
  • definetely >> definitely
  • Probably capitalize Twitter, Slack, and Github?
@DrewML

DrewML Nov 30, 2016

Member
  • it's >> its
  • definetely >> definitely
  • Probably capitalize Twitter, Slack, and Github?

This comment has been minimized.

@gaearon

gaearon Nov 30, 2016

Member

And JavaScript

@gaearon

gaearon Nov 30, 2016

Member

And JavaScript

Show outdated Hide outdated _posts/2016-11-29-future.md
Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
I believe our main goal is to make it possible to write Javascript in any environment you support as seamless as possible and through that support the future of Javascript tooling.

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

Javascript >> JavaScript

@DrewML

DrewML Nov 30, 2016

Member

Javascript >> JavaScript

@hzoo hzoo changed the title from Future blog post to WIP: Future blog post Nov 30, 2016

Show outdated Hide outdated _posts/2016-11-29-future.md
### Maintaining Babel plugins [for each proposal in TC-39](https://github.com/tc39/proposals) starting from stage-0
Users should be able to easily use features before they are actually released in browsers in stage 4.

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

Could make stage 4 a link to the process document for those unfamiliar with the significance of the stages (or just include it somewhere?)

@DrewML

DrewML Nov 30, 2016

Member

Could make stage 4 a link to the process document for those unfamiliar with the significance of the stages (or just include it somewhere?)

Show outdated Hide outdated _posts/2016-11-29-future.md
Users should be able to easily use features before they are actually released in browsers in stage 4.
This is the core of Babel. It had it's start as a JavaScript transpiler for ES6 back when it was still called 6to5.

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

it's >> its

@DrewML

DrewML Nov 30, 2016

Member

it's >> its

Show outdated Hide outdated _posts/2016-11-29-future.md
> A good example: [babel/babel#3473](https://github.com/babel/babel/pull/3473) wasn't merged for so long because just didn't have time to review it. By the time it was merged it had already moved from stage-2 to stage-3.
### Maintaining other ecosystem plugins: like JSX/Flow.

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

Can probably drop like here

@DrewML

DrewML Nov 30, 2016

Member

Can probably drop like here

Show outdated Hide outdated _posts/2016-11-29-future.md
- [React plugins](https://babeljs.io/docs/plugins/#react)
- [Flow plugin](https://babeljs.io/docs/plugins/transform-flow-strip-types)
### Autoprefixer for Babel via [babel-preset-env](https://github.com/babel/babel-preset-env)

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

Could add something into this paragraph about how (at least part of) the goal of efforts like preset-env and dynamic polyfill injection is to lessen the size of the payload everyone is shipping down to the client.

@DrewML

DrewML Nov 30, 2016

Member

Could add something into this paragraph about how (at least part of) the goal of efforts like preset-env and dynamic polyfill injection is to lessen the size of the payload everyone is shipping down to the client.

Show outdated Hide outdated _posts/2016-11-29-future.md
> Some transforms are simply out of date (one example is decorators) and Logan had to make [babel-plugin-transform-decorators-legacy](https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy) for the previous version and no one has had time for an update.
> A good example: [babel/babel#3473](https://github.com/babel/babel/pull/3473) wasn't merged for so long because just didn't have time to review it. By the time it was merged it had already moved from stage-2 to stage-3.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"because we just didn't"

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"because we just didn't"

Show outdated Hide outdated _posts/2016-11-29-future.md
[jscodeshift](https://github.com/facebook/jscodeshift), [js-codemod](https://github.com/cpojer/js-codemod), [Lebab](https://github.com/lebab/lebab).
By passing in recast in the options, Babel can also be run on source code and can power the future of codemods. This feature was just made possible so looking forward to making it easier to do and the transformations it can enable.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Can you provide a link to more info about what you mean by "passing in recast in the options"?

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Can you provide a link to more info about what you mean by "passing in recast in the options"?

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"This feature was just made possible, so we're looking forward to making it easier to use and seeing the transformations it can enable"

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"This feature was just made possible, so we're looking forward to making it easier to use and seeing the transformations it can enable"

This comment has been minimized.

@hzoo

hzoo Nov 30, 2016

Member

Yeah good idea - and even just now https://twitter.com/left_pad/status/803817402983124992 - would be interesting if we could provide a codemod for stage-x to make it "safer".

@hzoo

hzoo Nov 30, 2016

Member

Yeah good idea - and even just now https://twitter.com/left_pad/status/803817402983124992 - would be interesting if we could provide a codemod for stage-x to make it "safer".

Show outdated Hide outdated _posts/2016-11-29-future.md
### API Documentation / Community
Meetups, tutorials, videos, open source workshops, etc.
Docs should be explaining each feature and possible usages, improved links to books, articles, etc.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"Docs should explain each ..."

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"Docs should explain each ..."

Show outdated Hide outdated _posts/2016-11-29-future.md
Docs should be explaining each feature and possible usages, improved links to books, articles, etc.
- All plugins should have examples/repl links. Can also embed runkit.
- Update Learn ES2015 to have ES2015+.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

These sound like future items of work. Does this still belong in the "Current Status" section?

@mrjoelkemp

mrjoelkemp Nov 30, 2016

These sound like future items of work. Does this still belong in the "Current Status" section?

Show outdated Hide outdated _posts/2016-11-29-future.md
### Documentation/Website
Definetely has been lacking in contributors the [last year](https://github.com/babel/babel.github.io/graphs/contributors?from=2015-11-29&to=2016-11-29&type=c).

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

Definetely >> definitely

@DrewML

DrewML Nov 30, 2016

Member

Definetely >> definitely

Show outdated Hide outdated _posts/2016-11-29-future.md
### Maintaining Babel plugins [for each proposal in TC-39](https://github.com/tc39/proposals) starting from stage-0
Users should be able to easily use features before they are actually released in browsers in stage 4.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

I'd say implemented rather than released

@kentcdodds

kentcdodds Nov 30, 2016

Member

I'd say implemented rather than released

Show outdated Hide outdated _posts/2016-11-29-future.md
In short, proposal champions won't be getting much feedback if no one is actually trying them out in actual code. Babel is a fundamentally important step to the TC-39 process given familiarity in the ecosystem, a simple config change in most people's build process rather than through browser flags, and relative ease of implementation vs. native implementation.
This isn't just a one-time thing as we've found out, especially for early stage proposals. The creation of a plugin means the eventual maintenance of that same plugin. Proposals could completely change in syntax or even get dropped. Since TC-39 meets every 2 months, the plugins should be updated as meetings happen so that users can be in sync and involved with the standards process.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

This might be an ok time to mention this rule of thumb

My rule of thumb on how I decide what future features to transpile:
"Could I reasonably codemod this if it changes?"
Don't do it otherwise.

Something like that anyway.

@kentcdodds

kentcdodds Nov 30, 2016

Member

This might be an ok time to mention this rule of thumb

My rule of thumb on how I decide what future features to transpile:
"Could I reasonably codemod this if it changes?"
Don't do it otherwise.

Something like that anyway.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

People using features too soon can actually prevent the TC39 from reasonably making improvements (changes) to it if the migration would be too great.

@kentcdodds

kentcdodds Nov 30, 2016

Member

People using features too soon can actually prevent the TC39 from reasonably making improvements (changes) to it if the migration would be too great.

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

We're actually discussing (or were, in Slack) starting to make it feel a bit more "scary" to use Stage 0 transforms, just so people are super aware what they're about to do. Big red warnings on docs pages was going to be a start to it.

@DrewML

DrewML Nov 30, 2016

Member

We're actually discussing (or were, in Slack) starting to make it feel a bit more "scary" to use Stage 0 transforms, just so people are super aware what they're about to do. Big red warnings on docs pages was going to be a start to it.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

What if instead of stage-0, stage-1 we called them super-dangerous pretty-dangerous, etc :)

@kentcdodds

kentcdodds Nov 30, 2016

Member

What if instead of stage-0, stage-1 we called them super-dangerous pretty-dangerous, etc :)

This comment has been minimized.

@DrewML

DrewML Nov 30, 2016

Member

Honestly, I personally would love that. You have to acknowledge what you're doing everytime you open up package.json/.babelrc

@DrewML

DrewML Nov 30, 2016

Member

Honestly, I personally would love that. You have to acknowledge what you're doing everytime you open up package.json/.babelrc

Show outdated Hide outdated _posts/2016-11-29-future.md
### Minification
[babel/babili](https://github.com/babel/babili) was created as a future proof minifier.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

Why was this never changed to babel-minify? 馃槮

@kentcdodds

kentcdodds Nov 30, 2016

Member

Why was this never changed to babel-minify? 馃槮

Show outdated Hide outdated _posts/2016-11-29-future.md
[jscodeshift](https://github.com/facebook/jscodeshift), [js-codemod](https://github.com/cpojer/js-codemod), [Lebab](https://github.com/lebab/lebab).
By passing in recast in the options, Babel can also be run on source code and can power the future of codemods. This feature was just made possible so looking forward to making it easier to do and the transformations it can enable.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

Link up recast so people can learn about what it is?

@kentcdodds

kentcdodds Nov 30, 2016

Member

Link up recast so people can learn about what it is?

Show outdated Hide outdated _posts/2016-11-29-future.md
### Code Coverage / Instrumentation
With tools like [nyc](https://github.com/istanbuljs/nyc) and [babel-plugin-instanbul](https://github.com/istanbuljs/babel-plugin-istanbul).

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

Should probably also mention babel-plugin-__coverage__ which is my preferred version when I'm using Karma. Though that was several months ago.. Maybe babel-plugin-istanbul is better

Oh, also babel-plugin-instanbul should be babel-plugin-istanbul

@kentcdodds

kentcdodds Nov 30, 2016

Member

Should probably also mention babel-plugin-__coverage__ which is my preferred version when I'm using Karma. Though that was several months ago.. Maybe babel-plugin-istanbul is better

Oh, also babel-plugin-instanbul should be babel-plugin-istanbul

This comment has been minimized.

@hzoo

hzoo Nov 30, 2016

Member

babel-plugin-istanbul seems to be the new one (also based on the work from that plugin) dtinth/babel-plugin-__coverage__#42.

Were using it in babel now as well babel/babel#4885

@hzoo

hzoo Nov 30, 2016

Member

babel-plugin-istanbul seems to be the new one (also based on the work from that plugin) dtinth/babel-plugin-__coverage__#42.

Were using it in babel now as well babel/babel#4885

Show outdated Hide outdated _posts/2016-11-29-future.md
### [Plugin API Changes](https://github.com/babel/notes/blob/master/2016-08/august-01.md#potential-api-changes-for-traversal)
Currently many users have trouble with plugin/preset ordering and it's very confusing what plugin is run before/after and how to make it do so. This is a fundamental change to the core of Babel which will take some work to figure out.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

Boy isn't that the truth!

@kentcdodds

kentcdodds Nov 30, 2016

Member

Boy isn't that the truth!

Show outdated Hide outdated _posts/2016-11-29-future.md
Integrate with a type system such as flow/typescript to make optimizations.
> Sidenote: Be able to understand typescript syntax (similar to flow), add a plugin to strip typescript types for better interop.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

This would be huge! And would require quite a bit of effort. Should probably be more than a sidenote.

@kentcdodds

kentcdodds Nov 30, 2016

Member

This would be huge! And would require quite a bit of effort. Should probably be more than a sidenote.

Show outdated Hide outdated _posts/2016-11-29-future.md
### Run [tc39/test262](https://github.com/tc39/test262)
Running official spec tests against Babel to make sure we comply to the spec or at least know when we don't.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

This would be pretty sweet

@kentcdodds

kentcdodds Nov 30, 2016

Member

This would be pretty sweet

Show outdated Hide outdated _posts/2016-11-29-future.md
### Smoke Tests
[motiz88/babel-smoke-tests](https://github.com/motiz88/babel-smoke-tests).

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

Should describe this a bit more I think. So people know what it means without having to click the link.

@kentcdodds

kentcdodds Nov 30, 2016

Member

Should describe this a bit more I think. So people know what it means without having to click the link.

Show outdated Hide outdated _posts/2016-11-29-future.md
### Program Analysis
- [Program Slicing](https://en.wikipedia.org/wiki/Program_slicing) with [slice-js](http://slides.com/kentcdodds/faster-javascript#/)

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

wahoo! 馃帀

@kentcdodds

kentcdodds Nov 30, 2016

Member

wahoo! 馃帀

Show outdated Hide outdated _posts/2016-11-29-future.md
### [Plugin API Changes](https://github.com/babel/notes/blob/master/2016-08/august-01.md#potential-api-changes-for-traversal)
Currently many users have trouble with plugin/preset ordering and it's very confusing what plugin is run before/after and how to make it do so. This is a fundamental change to the core of Babel which will take some work to figure out.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Not sure if I'm capturing the essence of what you're trying to say: "Currently many users have trouble with plugin/preset sequencing (i.e., how to make a plugin run before/after another plugin)"

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Not sure if I'm capturing the essence of what you're trying to say: "Currently many users have trouble with plugin/preset sequencing (i.e., how to make a plugin run before/after another plugin)"

Show outdated Hide outdated _posts/2016-11-29-future.md
> Sidenote: Be able to understand typescript syntax (similar to flow), add a plugin to strip typescript types for better interop.
### Read the dependency graph

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Non-blocker: Section casing is inconsistent with the other sections.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Non-blocker: Section casing is inconsistent with the other sections.

Show outdated Hide outdated _posts/2016-11-29-future.md
### Read the dependency graph
Integrate with other tools like webpack/bundlers? This will allow cross file transformations or whole codebase optimizations.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Examples of the cross-file transformations or whole codebase transformations?

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Examples of the cross-file transformations or whole codebase transformations?

Show outdated Hide outdated _posts/2016-11-29-future.md
### Smoke Tests
[motiz88/babel-smoke-tests](https://github.com/motiz88/babel-smoke-tests).

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Short description like you did in the other sections?

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Short description like you did in the other sections?

Show outdated Hide outdated _posts/2016-11-29-future.md
### `babel --debug`
Print out all info when erroring. Also perf tooling to get more info on how long each plugin takes.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Should "Also perf tooling" be "It will also include perf tooling ..."?

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Should "Also perf tooling" be "It will also include perf tooling ..."?

Show outdated Hide outdated _posts/2016-11-29-future.md
### Syntax plugins:
Opening the gates might lead to an ecosystem of incompatible plugins.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Not sure what you're hinting at with opening the gates and an ecosystem of incompatible plugins. Are there any examples?

@mrjoelkemp

mrjoelkemp Nov 30, 2016

Not sure what you're hinting at with opening the gates and an ecosystem of incompatible plugins. Are there any examples?

Show outdated Hide outdated _posts/2016-11-29-future.md
#### Pluggable Parser
There's been a lot of talk about this but not much progress. Acorn/Babylon does already support overriding parser methods (like with JSX/Flow) but were not sure we want to do this just yet. Workaround is to fork it and pass that to Babel.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"There's been a lot of talk about this but not much progress. Acorn/Babylon already supports overriding parser methods (like with JSX/Flow) but we're not sure that we want to do this just yet. A workaround is to fork it and pass that to Babel."

When you say "A workaround is to fork it," fork what exactly?

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"There's been a lot of talk about this but not much progress. Acorn/Babylon already supports overriding parser methods (like with JSX/Flow) but we're not sure that we want to do this just yet. A workaround is to fork it and pass that to Babel."

When you say "A workaround is to fork it," fork what exactly?

Show outdated Hide outdated _posts/2016-11-29-future.md
- [Call for Contributors!](https://github.com/babel/babel/issues/1347)
- [Being prepared for getting hit by a bus](https://github.com/babel/babel/issues/1888)
You might think that as [a project get more widely used](https://npm-stat.com/charts.html?package=babel-core) that more people show up to help out but like most oss projects that aren't backed by a company there is a constant issue with maintaince and sustainability; people get burned out, move on to other cool projects, or get busy with work, life, family, etc.

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"You might think that as a project gets more widely used that more people show up to help out, but like most OSS projects that aren't backed by a company, there is a constant issue with maintenance and sustainability; people get burned out, move on to other cool projects, or get busy with work, life, family, etc."

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"You might think that as a project gets more widely used that more people show up to help out, but like most OSS projects that aren't backed by a company, there is a constant issue with maintenance and sustainability; people get burned out, move on to other cool projects, or get busy with work, life, family, etc."

This comment has been minimized.

@yyx990803

yyx990803 Nov 30, 2016

This part could use more emphasis if you don't mind going into more details. People may not realize how few maintainers are currently actively involved.

@yyx990803

yyx990803 Nov 30, 2016

This part could use more emphasis if you don't mind going into more details. People may not realize how few maintainers are currently actively involved.

This comment has been minimized.

@hzoo

hzoo Nov 30, 2016

Member

Yeah definetely

@hzoo

hzoo Nov 30, 2016

Member

Yeah definetely

Show outdated Hide outdated _posts/2016-11-29-future.md
### Documentation/Website
Definetely has been lacking in contributors the [last year](https://github.com/babel/babel.github.io/graphs/contributors?from=2015-11-29&to=2016-11-29&type=c).

This comment has been minimized.

@mrjoelkemp

mrjoelkemp Nov 30, 2016

"Definitely"

@mrjoelkemp
@mrjoelkemp

This comment has been minimized.

Show comment
Hide comment
@mrjoelkemp

mrjoelkemp Nov 30, 2016

This is going to be an awesome post. Making great progress so far! Thanks for putting this together.

mrjoelkemp commented Nov 30, 2016

This is going to be an awesome post. Making great progress so far! Thanks for putting this together.

@hzoo

This comment has been minimized.

Show comment
Hide comment
@hzoo

hzoo Nov 30, 2016

Member

Will check again tomorrow! Thanks everyone for looking it over so far 馃槉

Member

hzoo commented Nov 30, 2016

Will check again tomorrow! Thanks everyone for looking it over so far 馃槉

Show outdated Hide outdated _posts/2016-11-29-future.md
Maintaining any large open source project could deserve its own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.
Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on Twitter, Slack, and Github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

This comment has been minimized.

@existentialism

existentialism Nov 30, 2016

Member

Nit: it's >> its

@existentialism

existentialism Nov 30, 2016

Member

Nit: it's >> its

Show outdated Hide outdated _posts/2016-11-29-future.md
Babel has it's place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on Twitter, Slack, and Github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
I believe our main goal is to make it possible to write JavaScript in any environment you support as seamless as possible and through that support the future of JavaScript tooling.

This comment has been minimized.

@jdalton

jdalton Nov 30, 2016

Member

Any environment? Node 0.10?

@jdalton

jdalton Nov 30, 2016

Member

Any environment? Node 0.10?

Show outdated Hide outdated _posts/2016-11-29-future.md
In short, proposal champions won't be getting much feedback if no one is actually trying them out in actual code. Babel is a fundamentally important step to the TC-39 process given familiarity in the ecosystem, a simple config change in most people's build process rather than through browser flags, and relative ease of implementation vs. native implementation.
This isn't just a one-time thing as we've found out, especially for early stage proposals. The creation of a plugin means the eventual maintenance of that same plugin. Proposals could completely change in syntax or even get dropped. Since TC-39 meets every 2 months, the plugins should be updated as meetings happen so that users can be in sync and involved with the standards process.

This comment has been minimized.

@jdalton

jdalton Nov 30, 2016

Member

TC-39 -> TC39

@jdalton

jdalton Nov 30, 2016

Member

TC-39 -> TC39

Show outdated Hide outdated _posts/2016-11-29-future.md
## Current Status
### Maintaining Babel plugins [for each proposal in TC-39](https://github.com/tc39/proposals) starting from stage-0

This comment has been minimized.

@gaearon

gaearon Nov 30, 2016

Member

Style nit: let's consistently write "stage 0" rather than "stage-0" and same below. Or the other way around. Right now the article mixes them.

@gaearon

gaearon Nov 30, 2016

Member

Style nit: let's consistently write "stage 0" rather than "stage-0" and same below. Or the other way around. Right now the article mixes them.

Show outdated Hide outdated _posts/2016-11-29-future.md
### `babel-init`
Setup Babel more easily for those still fatigued.
Show outdated Hide outdated _posts/2016-11-29-future.md
### Minification
[babel/babili](https://github.com/babel/babili) was created as a future proof minifier.

This comment has been minimized.

@nolanlawson

nolanlawson Nov 30, 2016

Nit: "future-proof"

@nolanlawson

nolanlawson Nov 30, 2016

Nit: "future-proof"

@jayphelps

Overall very solid.

Show outdated Hide outdated _posts/2016-11-29-future.md
Maintaining any large open source project could deserve its own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.
Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

This comment has been minimized.

@jayphelps

jayphelps Nov 30, 2016

Contributor

s/definetely/definitely

@jayphelps

jayphelps Nov 30, 2016

Contributor

s/definetely/definitely

Show outdated Hide outdated _posts/2016-11-29-future.md
Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definetely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
I believe our main goal is to make it possible to write Javascript in any environment you support as seamless as possible and through that support the future of Javascript tooling.

This comment has been minimized.

@jayphelps

jayphelps Nov 30, 2016

Contributor

Required me to reread this sentence several times to understand. Perhaps rephrase.

@jayphelps

jayphelps Nov 30, 2016

Contributor

Required me to reread this sentence several times to understand. Perhaps rephrase.

Show outdated Hide outdated _posts/2016-11-29-future.md
### Typescript support
Be able to understand typescript syntax (like we do with flow), add a plugin to strip typescript types for better interop.

This comment has been minimized.

@jayphelps

jayphelps Nov 30, 2016

Contributor

Might want to clarify whether or not this includes semantics of TypeScript. I imagine it does not, only syntax parsing, so I would guess a number of people will wrongfully assume Babel plans to literally add real type checking support. The next section mentions using type information, but this is very very non-trivial to do for everything (basically reimplementing tsc, as you prolly realize). TypeScript, unlike Flow, also requires runtime code for certain features like Enums, so it's not just stripping of types. Summary: "understand typescript syntax" might imply type checking to people who don't clearly understand the distinction.

@jayphelps

jayphelps Nov 30, 2016

Contributor

Might want to clarify whether or not this includes semantics of TypeScript. I imagine it does not, only syntax parsing, so I would guess a number of people will wrongfully assume Babel plans to literally add real type checking support. The next section mentions using type information, but this is very very non-trivial to do for everything (basically reimplementing tsc, as you prolly realize). TypeScript, unlike Flow, also requires runtime code for certain features like Enums, so it's not just stripping of types. Summary: "understand typescript syntax" might imply type checking to people who don't clearly understand the distinction.

Show outdated Hide outdated _posts/2016-11-29-future.md
### Use Type Information
Integrate with a type system such as flow/typescript to make optimizations.

This comment has been minimized.

@jayphelps

jayphelps Nov 30, 2016

Contributor

Similar to point above, might be best to clarify this a bit to not unintentionally suggest babel will actually check types, unless of course it will. 馃槺

@jayphelps

jayphelps Nov 30, 2016

Contributor

Similar to point above, might be best to clarify this a bit to not unintentionally suggest babel will actually check types, unless of course it will. 馃槺

Show outdated Hide outdated _posts/2016-11-29-future.md
### Smoke Tests
It would be useful to either have a reverse [greenkeeper](https://greenkeeper.io) or to run tests with master branch of Babel so that we can catch any major regressions before any release. In theory we would want to take the biggest open source projects that use babel and run their tests.

This comment has been minimized.

@jayphelps

jayphelps Nov 30, 2016

Contributor

What about canary builds? i.e. npm publish a canary tag of master every time it changes. Ember does this and it's amazing cause people can (and do) use it in their CI to check for upcoming breakage.

@jayphelps

jayphelps Nov 30, 2016

Contributor

What about canary builds? i.e. npm publish a canary tag of master every time it changes. Ember does this and it's amazing cause people can (and do) use it in their CI to check for upcoming breakage.

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

@bahmutov could probably tell us about how dont-break could help accomplish this :)

@kentcdodds

kentcdodds Nov 30, 2016

Member

@bahmutov could probably tell us about how dont-break could help accomplish this :)

This comment has been minimized.

@hzoo

hzoo Nov 30, 2016

Member

Yeah I've wanted that before and why we tried to implement canary in lerna for Babel. However we haven't tired it due to not being confident about what happens with multiple dependencies and transitive deps given Babel is composed of other packages and other projects are just 1

@hzoo

hzoo Nov 30, 2016

Member

Yeah I've wanted that before and why we tried to implement canary in lerna for Babel. However we haven't tired it due to not being confident about what happens with multiple dependencies and transitive deps given Babel is composed of other packages and other projects are just 1

Show outdated Hide outdated _posts/2016-11-29-future.md
### Core Packages
> TODO

This comment has been minimized.

@jayphelps

jayphelps Nov 30, 2016

Contributor

Reminder that this section is marked TODO 馃拑

@jayphelps

jayphelps Nov 30, 2016

Contributor

Reminder that this section is marked TODO 馃拑

Show outdated Hide outdated _posts/2016-11-29-future.md
This is a fundamental change to the core of Babel which will take some work to figure out.
### Typescript Support

This comment has been minimized.

@kentcdodds

kentcdodds Nov 30, 2016

Member

I think that official casing is TypeScript (with a capital T and a capital S). We should probably use that throughout.

@kentcdodds

kentcdodds Nov 30, 2016

Member

I think that official casing is TypeScript (with a capital T and a capital S). We should probably use that throughout.

This comment has been minimized.

@kentcdodds

kentcdodds Dec 1, 2016

Member

I saw you committed a change to update caps, but you didn't capitalize the S :)

@kentcdodds

kentcdodds Dec 1, 2016

Member

I saw you committed a change to update caps, but you didn't capitalize the S :)

This comment has been minimized.

@hzoo

hzoo Dec 1, 2016

Member

Dang it haha

@hzoo

hzoo Dec 1, 2016

Member

Dang it haha

@montogeek

Just little comments, Babel future looks great!

Show outdated Hide outdated _posts/2016-11-29-future.md
Maintaining any large open source project could deserve its own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.
Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

Twitter, Slack and GitHub reads better :)

@montogeek

montogeek Dec 1, 2016

Contributor

Twitter, Slack and GitHub reads better :)

Show outdated Hide outdated _posts/2016-11-29-future.md
Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on twitter, slack, and github across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
We want to continue to allow developers to write the latest version of Javascript in any environment. With that supporting all the tools around that: linting, minification, codemods, code coverage, etc.

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

Last phrase uses that twice, one really close to the other, making the phrase hard to read, what about:

And supporting all the tools around that

@montogeek

montogeek Dec 1, 2016

Contributor

Last phrase uses that twice, one really close to the other, making the phrase hard to read, what about:

And supporting all the tools around that

Show outdated Hide outdated _posts/2016-11-29-future.md
Users should be able to easily use features before they are actually implemented in browsers in [stage 4](https://tc39.github.io/process-document/).
This is the core of Babel. It had its start as a javascript transpiler for ES6 back when it was still called 6to5.

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

Show outdated Hide outdated _posts/2016-11-29-future.md
### Linting via [babel-eslint](https://github.com/babel/babel-eslint)
As long as you want to lint javascript with experimental features (stage x, types) that ESLint proper won't support yet.

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

Show outdated Hide outdated _posts/2016-11-29-future.md
[babel/babili](https://github.com/babel/babili) was created as a future-proof minifier.
It will be continually updated to take advantage of the latest javascript features (ES2015+ aware). Each transform can be independent and also pluggable.

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

@montogeek

montogeek Dec 1, 2016

Contributor

JavaScript

Show outdated Hide outdated _posts/2016-11-29-future.md
### `babel-init`
Basically a way to setup babel easier like create-react-app does.

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

Babel

@montogeek

montogeek Dec 1, 2016

Contributor

Babel

Show outdated Hide outdated _posts/2016-11-29-future.md
### Smoke Tests
It would be useful to either have a reverse [Greenkeeper](https://greenkeeper.io) or to run tests with master branch of Babel so that we can catch any major regressions before any release. In theory we would want to take the biggest open source projects that use babel and run their tests.

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

Babel

@montogeek

montogeek Dec 1, 2016

Contributor

Babel

Show outdated Hide outdated _posts/2016-11-29-future.md
#### Others?
Anything not already brought up here? Please send us a tweet @babeljs, a message on our slack (join at [http://slack.babeljs.io/](slack.babeljs.io), or create an RFC-like issue in our repo!

This comment has been minimized.

@montogeek

montogeek Dec 1, 2016

Contributor

[@babeljs](https://twitter.com/babeljs)

@montogeek

montogeek Dec 1, 2016

Contributor

[@babeljs](https://twitter.com/babeljs)

Show outdated Hide outdated _posts/2016-11-29-future.md
### Syntax plugins:
#### Pluggable Parser

This comment has been minimized.

@TheLarkInn

TheLarkInn Dec 1, 2016

Feel free to (not required to) reference https://github.com/TheLarkInn/js-parser-discussions it has been initially discussed but this is something I see that could bring huge unity in the tooling land and interoperability. Initial discussions and analysis was made but I haven't gotten back to it in a bit since webpack is primary focus.

@TheLarkInn

TheLarkInn Dec 1, 2016

Feel free to (not required to) reference https://github.com/TheLarkInn/js-parser-discussions it has been initially discussed but this is something I see that could bring huge unity in the tooling land and interoperability. Initial discussions and analysis was made but I haven't gotten back to it in a bit since webpack is primary focus.

@jasonLaster

Great work so far!

This is a great, detailed post. It almost strikes me as an annual report on the state of babel.

Show outdated Hide outdated _posts/2016-11-29-future.md
Maintaining any large open source project could deserve its own article, but Babel itself covers a lot of ground: core packages, plugins, build integrations such as gulp, webpack, etc (many of which we ourselves may not use), and more. We want to be able to support community plugins, presets, and ideas.
Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on Twitter, Slack, and GitHub across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

perhaps replace working with with collaboration with

also, might be nice to mention project health

@jasonLaster

jasonLaster Dec 1, 2016

perhaps replace working with with collaboration with

also, might be nice to mention project health

Show outdated Hide outdated _posts/2016-11-29-future.md
Babel has its place in many tutorials, guides, talks, etc for various frameworks. The project itself has definitely helped me to understand the language better through bug fixes and support questions. We are active on Twitter, Slack, and GitHub across other projects that use Babel. We have to balance new features, bug fixes, browser support, speed of compilation/generated code, plugin options, ease of use, working with individuals, big companies, libraries, and more.
We want to continue to allow developers to write the latest version of JavaScript in any environment along with supporting the its tooling: linting, minification, codemods, code coverage, etc.

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

"we want to continue allowing developers"

replace supporting the its tooling with supporting the JS toolchain

@jasonLaster

jasonLaster Dec 1, 2016

"we want to continue allowing developers"

replace supporting the its tooling with supporting the JS toolchain

Show outdated Hide outdated _posts/2016-11-29-future.md
> Some transforms are simply out of date (one example is decorators) and Logan had to make [babel-plugin-transform-decorators-legacy](https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy) for the previous version and no one has had time for an update.
> A good example: [babel/babel#3473](https://github.com/babel/babel/pull/3473) wasn't merged for so long because we just didn't have time to review it. By the time it was merged it had already moved from stage 2 to stage 3.

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

it's not clear how these three quotes are connected to kent's comment.

@jasonLaster

jasonLaster Dec 1, 2016

it's not clear how these three quotes are connected to kent's comment.

Show outdated Hide outdated _posts/2016-11-29-future.md
This is the core of Babel. It had its start as a JavaScript transpiler for ES6 back when it was still called 6to5.
In short, proposal champions won't be getting much feedback if no one is actually trying them out in actual code. Babel is a fundamentally important step to the TC39 process given familiarity in the ecosystem, a simple config change in most people's build process rather than through browser flags, and relative ease of implementation vs. native implementation.

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

I think this paragraph could benefit from being more active.

In short, proposal champions benefit from getting feedback early and often. Babel is fundemental in the TC39 process given its place in the ecosystem. It's significantly easier for a developer toupdate a babelrc file than a browser flag.

@jasonLaster

jasonLaster Dec 1, 2016

I think this paragraph could benefit from being more active.

In short, proposal champions benefit from getting feedback early and often. Babel is fundemental in the TC39 process given its place in the ecosystem. It's significantly easier for a developer toupdate a babelrc file than a browser flag.

Show outdated Hide outdated _posts/2016-11-29-future.md
In short, proposal champions won't be getting much feedback if no one is actually trying them out in actual code. Babel is a fundamentally important step to the TC39 process given familiarity in the ecosystem, a simple config change in most people's build process rather than through browser flags, and relative ease of implementation vs. native implementation.
This isn't just a one-time thing as we've found out, especially for early stage proposals. The creation of a plugin means the eventual maintenance of that same plugin. Proposals could completely change in syntax or even get dropped. Since TC39 meets every 2 months, the plugins should be updated as meetings happen so that users can be in sync and involved with the standards process.

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

The creation of a plugin means the eventual maintenance of that same plugin

Perhaps this sentence can read:

Proposal processes often take (n) months and involve signficant iteration.

@jasonLaster

jasonLaster Dec 1, 2016

The creation of a plugin means the eventual maintenance of that same plugin

Perhaps this sentence can read:

Proposal processes often take (n) months and involve signficant iteration.

Show outdated Hide outdated _posts/2016-11-29-future.md
### Smoke Tests
It would be useful to either have a reverse [Greenkeeper](https://greenkeeper.io) or to run tests with master branch of Babel so that we can catch any major regressions before any release. In theory we would want to take the biggest open source projects that use Babel and run their tests.

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

node does this with project canary https://github.com/nodejs/citgm. Might be nice to mention that next to reverse greenkeeper

@jasonLaster

jasonLaster Dec 1, 2016

node does this with project canary https://github.com/nodejs/citgm. Might be nice to mention that next to reverse greenkeeper

Show outdated Hide outdated _posts/2016-11-29-future.md
[motiz88/babel-smoke-tests](https://github.com/motiz88/babel-smoke-tests) is a start!
### API Documentation / Community

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

I'd separate these two out. they are both important

@jasonLaster

jasonLaster Dec 1, 2016

I'd separate these two out. they are both important

Show outdated Hide outdated _posts/2016-11-29-future.md
- [Call for Contributors!](https://github.com/babel/babel/issues/1347)
- [Being Prepared for Getting Hit by a Bus](https://github.com/babel/babel/issues/1888)
You might think that as [a project get more widely used](https://npm-stat.com/charts.html?package=babel-core) that more people show up to help out, but like most OSS projects that aren't backed by a company, there is a constant issue with maintenance and sustainability; people get burned out, move on to other cool projects, or get busy with work, life, family, etc.

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

project get => project gets

@jasonLaster

jasonLaster Dec 1, 2016

project get => project gets

Show outdated Hide outdated _posts/2016-11-29-future.md
You might think that as [a project get more widely used](https://npm-stat.com/charts.html?package=babel-core) that more people show up to help out, but like most OSS projects that aren't backed by a company, there is a constant issue with maintenance and sustainability; people get burned out, move on to other cool projects, or get busy with work, life, family, etc.
> TODO

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

Mention ways to help, best ways to get involved, calls, slack, mentoring, etc

@jasonLaster

jasonLaster Dec 1, 2016

Mention ways to help, best ways to get involved, calls, slack, mentoring, etc

Show outdated Hide outdated _posts/2016-11-29-future.md
- [Babili: render the docs for babel-minify](https://github.com/babel/babel.github.io/issues/999)
- [Showcase community plugins](https://github.com/babel/babel.github.io/issues/831)
- [REPL: allow the REPL to import any community plugin from npm](https://github.com/babel/babel.github.io/issues/858)
- [REPL: Use ASTexplorer](https://github.com/fkling/astexplorer/issues/70)

This comment has been minimized.

@jasonLaster

jasonLaster Dec 1, 2016

馃憤 this is my favorite part of the post. This says a lot because I liked the post a lot too!

@jasonLaster

jasonLaster Dec 1, 2016

馃憤 this is my favorite part of the post. This says a lot because I liked the post a lot too!

@hzoo hzoo referenced this pull request Dec 1, 2016

Closed

Day 7 - write for web.advent.today 鉁 #7

0 of 3 tasks complete
@danharper

just some suggestions on wording for the less fleshed-out sections

Show outdated Hide outdated _posts/2016-11-29-future.md
In short, proposal champions benefit from getting feedback early and often. Babel is fundamental in the TC39 process given its place in the ecosystem. It's significantly easier for a developer to update a `.babelrc` file than a browser flag. It's also much faster to write a Babel plugin than implement the feature natively.
Babel uses [TC39's concept of stages](http://babeljs.io/docs/plugins/#stage-x-experimental-presets-) to categorize its experimental plugins.

This comment has been minimized.

@danharper

danharper Dec 1, 2016

Member

Perhaps move this paragraph above the previous one - it introduces the section, TC39 & proposals well

@danharper

danharper Dec 1, 2016

Member

Perhaps move this paragraph above the previous one - it introduces the section, TC39 & proposals well

Show outdated Hide outdated _posts/2016-11-29-future.md
There isn't enough time or resources to maintain each plugin, especially when there are spec updates.
Some transforms are simply out of date such as decorators. Logan had to port the previous spec [babel-plugin-transform-decorators-legacy](https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy) for Babel 6 and we haven't had annyone able to rewrite it for the updated spec.

This comment has been minimized.

@danharper

danharper Dec 1, 2016

Member

annyone

@danharper

danharper Dec 1, 2016

Member

annyone

Show outdated Hide outdated _posts/2016-11-29-future.md
### Linting via [babel-eslint](https://github.com/babel/babel-eslint)
As long as you want to lint JavaScript with experimental features (stage x, types) that ESLint proper won't support yet.

This comment has been minimized.

@danharper

danharper Dec 1, 2016

Member

Perhaps something like:

ESLint doesn't support new language features until they reach Stage 4 of the proposals process. For this reason we maintain babel-eslint, a custom ESLint parser so you can continue to lint JavaScript with experimental syntax.