Skip to content
This repository was archived by the owner on Oct 9, 2020. It is now read-only.
This repository was archived by the owner on Oct 9, 2020. It is now read-only.

Variable scoping error for named exports when doing minimal babel transpilation #75

@JensLincke

Description

@JensLincke

Our goal was to use babels transpilation only for the import/export statements and let the browser handle features such as classes / async natively.

Therefore we used the following options:

var defaultBabelOptions = {
  modularRuntime: true,
  sourceMaps: true,
  es2015: false,
  stage3: false,
  stage2: false,
  stage1: false,
  compact: false,
  comments: true
};

This works reasonably well, but we found the following issue. The class Foo is not in the scope the exported function greet.

export class Foo {
  static greet() {
    return "Hi"
  }
}
export function greet() {
  return Foo.greet()
}

Because it gets transpiled to:

(function(System, SystemJS) {System.register([], function (_export, _context) {
  "use strict";

  function greet() {
    return Foo.greet();
  }

  _export("greet", greet);

  return {
    setters: [],
    execute: function () {
      class Foo {
        static greet() {
          return "Hi";
        }
      }

      _export("Foo", Foo);
    }
  };
});
})

This will result in a runtime error when calling greet.

Uncaught (in promise) ReferenceError: Foo is not defined
    at ModuleNamespace.greet (tanspilationbug.js:7)
    at System.import.then.m (eval at resolve (juicy-ace-editor.js!transpiled:NaN), <anonymous>:1:55)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions