Facilitating the spread of knowledge and innovation in professional software development



Choose your language

InfoQ Homepage News Babel 7.5: Dynamic Import, Pipeline Operator and More

Babel 7.5: Dynamic Import, Pipeline Operator and More


The recently released Babel 7.5 can now parse and transpile F# pipelines and dynamic imports. Babel 7.5 additionally has experimental support for TypeScript namespaces.

The pipeline operator proposal, still in stage 1, consists of five variants. The first variant, also called “minimal” variant has been supported in Babel since version 7.0.0-beta. The last variant, dubbed Smart variant has been supported since version 7.3.0. Babel 7.5 now supports the second variant, named the F# variant.

The pipeline operator is a useful syntactic sugar on a function call with a single argument. For instance, sqrt(64) is equivalent to 64 |> sqrt. This allows for greater readability when chaining several functions together. The five variants for the pipeline operator cover the same functionality under different syntaxes.

For instance, the following JavaScript code:

let newScore = boundScore(
  add(7, double(person.score))  

is equivalent to the following code with the Smart pipeline syntax:

let newScore = person.score
  |> double
  |> add(7, #)
  |> boundScore(0, 100, #);     

The same code would be expressed with the F# pipeline syntax as follows:

let newScore = person.score
  |> double
  |> n => add(7, n)
  |> n => boundScore(0, 100, n);

The previous examples demonstrate that, instead of having the Smart pipeline’s concept of “topic references” (#), the F# pipeline syntax uses arrow functions. The Babel release explains the motivation behind the F# pipeline syntax:

[The F# pipeline syntax] has the advantage of being more similar to current JavaScript, at the cost of a slightly less concise syntax.

The F# pipeline operator handles await as if it was a function. The following JavaScript code:

let id = (
  await (
    await fetch(url)     

becomes with the F# pipeline syntax:

let newScore = fetch(url)
  |> await
  |> r => r.json()
  |> await
  |> obj => obj.ID;

To use the F# pipeline syntax, developers need to add @babel/plugin-proposal-pipeline-operator to their Babel configuration:

module.exports = {
  plugins: [
    ["@babel/proposal-pipeline-operator", { proposal: "fsharp" }]

Babel 7.5 additionally unifies its support for parsing dynamic imports. In previous Babel versions, developers would need to use different babel plugins according to the bundler they use. With webpack or rollup, they would only include @babel/plugin-syntax-dynamic-import and skip Babel transforms. With Node, they would use the babel-plugin-dynamic-import-node plugin. For SystemJS, they would use the @babel/plugin-transform-modules-systemjs plugin. These use cases are now unified under a single entry point: @babel/plugin-proposal-dynamic-import.

Developers can now also enable experimental support for TypeScript namespaces in the TypeScript plugin, using the allowNamespaces option of @babel/plugin-transform-typescript:

module.exports = {
  plugins: [
    ["@babel/plugin-transform-typescript", {
      allowNamespaces: true

Namespaces can then be used as follows:
namespace Validation {
  const lettersRegexp = /^[A-Za-z]+$/;
  const numberRegexp = /^[0-9]+$/;

  export class LettersOnlyValidator {
    isAcceptable(s: string) {
      return lettersRegexp.test(s);

The Babel 7.5 release also comes with a host of bug fixes and other improvements, including defaults browserlist query in @babel/preset-env.

Babel is available under the MIT open source license. Contributions are welcome via the Babel GitHub organization and should follow Babel’s contribution guidelines and code of conduct. Donations to support the project may also be made via Open Collective.

We need your feedback

How might we improve InfoQ for you

Thank you for being an InfoQ reader.

Each year, we seek feedback from our readers to help us improve InfoQ. Would you mind spending 2 minutes to share your feedback in our short survey? Your feedback will directly help us continually evolve how we support you.

Take the Survey

Rate this Article


Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p


Is your profile up-to-date? Please take a moment to review and update.

Note: If updating/changing your email, a validation request will be sent

Company name:
Company role:
Company size:
You will be sent an email to validate the new email address. This pop-up will close itself in a few moments.