node package manager
Stop writing boring code. Discover, share, and reuse within your team. Create a free org »

gulp-es6-module-to-closure

gulp-es6-module-to-closure

Build Status Coverage Status

compile ES6 import/export => Google Closure goog.require/goog.provide

Attention: For supporting ES6 features, some special rules are introduced. See examples below, especially if you use translated library from existing code.

Install

npm install gulp-es6-module-to-closure --save-dev

Usage

var es6ModuleToClosure = require("gulp-es6-module-to-closure");
 
gulp.src("./src/**/*.js")
  .pipe(es6ModuleToClosure({
    root: 'src',
    namespace: "prefix.name.space"
  }))
  .pipe(gulp.dest("./dist"));

Example

export

  • Compiling ${srcDir}/ns/file-name.js

export var foo = 'FOO';

  with namespace `com.xxx` will generate
  ```javascript
goog.provide("com.xxx.ns.filename.foo");
goog.scope(function() {
    com.xxx.ns.filename.foo = 'FOO';
});

at ${distDir}/ns/file-name.js.

  • Compiling ${srcDir}/ns/file-name.js

export default 'FOO';

  with namespace `com.xxx` will generate
  ```javascript
goog.provide("com.xxx.ns.filename.default");
goog.scope(function() {
    com.xxx.ns.filename.default = 'FOO';
});

at ${distDir}/ns/file-name.js.

import

  • Compiling ${srcDir}/ns/app.js

import {foo} from './file-name.js';

  with namespace `com.xxx` will generate
  ```javascript
goog.require("com.xxx.ns.filename.foo");
goog.scope(function() {
    var foo = com.xxx.ns.filename.foo;
});

at ${distDir}/ns/app.js.

  • Compiling ${srcDir}/ns/app.js

import foo from './file-name.js';

  with namespace `com.xxx` will generate
  ```javascript
goog.require("com.xxx.ns.filename.default");
goog.scope(function() {
    var foo = com.xxx.ns.filename.default;
});

at ${distDir}/ns/app.js.

Supported Syntax

Following table is made from Draft October 14, 2014.

https://people.mozilla.org/~jorendorff/es6-draft.html#sec-static-and-runtme-semantics-module-records

import

Syntax supported
import v from "mod";
import * as ns from "mod";
import {x} from "mod";
import {x as v} from "mod"; {x} from "mod";

export

Syntax supported
export var v;
export default function f(){};
export default function(){};
export default 42;
export {x};
export {v as x};
export {x} from "mod";
export {v as x} from "mod";
export * from "mod";

Migration

v0.x.x => v1.x.x

Reference from manual code to generated code is changed.

Before:

goog.require('name.space.varName');

After:

goog.require('name.space.fileName.varName');