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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions