Skip to content
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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: "import <Module File Path>" doesn't execute the module body as expected. #2130

Open
stuartZhang opened this issue Jul 21, 2016 · 4 comments

Comments

@stuartZhang
Copy link

I'd like to report a bug for the ES6 module importing.

According to the ES6 spec., the ES6-Module statement "import " merely executes the JavaScript routine inside the module body but doesn't really import any external variables or functions into the current context.

However, accompanying the latest Google Traceur, the statement "import " doesn't execute the module body as expected. On the contrary, I feel that the importing statement is directly ignored.

Only the statement "import ... from ..." does run the ES6 module body. Nevertheless, in my use case, I only intend to execute a piece of JavaScript program by importing its module, without any of the importing variables.

I anticipate the incorrect ES6 compilation behavior can be renovated.

@arv
Copy link
Collaborator

arv commented Jul 21, 2016

We do have tests for this: https://github.com/google/traceur-compiler/blob/master/test/feature/Modules/ImportNoImportClause.js

What options are you using?
Does import {} from '...' work?

@stuartZhang
Copy link
Author

The traceur command is as such:

node_modules/.bin/traceur --module=www/js/main.bbjs --out=_build/www/js/main.js --arrow-functions=true --block-binding=true --classes=true --computed-property-names=true --default-parameters=true --destructuring=true --for-of=true --generators=true --numeric-literals=true --property-methods=true --property-name-shorthand=true --rest-parameters=true --spread=true --symbols=true --template-literals=true --unicode-escape-sequences=true --unicode-expressions=true --proper-tail-calls=true --annotations=true --array-comprehension=true --async-functions=true --async-generators=true --exponentiation=true --export-from-extended=true --for-on=true --generator-comprehension=true --member-variables=true --spread-properties=true --types=true --source-maps=file

Through the above command, I'd like to compile "www/js/main.bbjs" to "_build/www/js/main.js"

In the "www/js/main.bbjs" file, a dozen of ES6 modules are imported by the ES6 module directives:

import common from './common.bbjs';
import mojioSdk from './sdk/mojio-js-3.5.1-ext.bbjs';
import nestSdk from './sdk/nest-sdk-ext.bbjs';
import artikSdk from './sdk/artik-cloud-sdk-2.0.2-ext.bbjs';
import alert from './widgets/alert.bbjs';

If the importing statement includes the import variable, the body of the imported module will be executed, even though only an empty string is exported from the target module.

In the corresponding compilation output (i.e. the ES5 file), the below statement is present:

var common = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./common.bbjs", "../../../www/js/main.bbjs")).default;

On the contrary, if the import variable is absent (e.g. as the below) in the importing statement, the body of the imported module won't be executed and the importing statement seems to be ignored in the main module "www/js/main.bbjs" by the Google Traceur.

import './common.bbjs';
import './sdk/mojio-js-3.5.1-ext.bbjs';
import './sdk/nest-sdk-ext.bbjs';
import './sdk/artik-cloud-sdk-2.0.2-ext.bbjs';
import './widgets/alert.bbjs';

@jogboms
Copy link

jogboms commented Aug 19, 2016

Has there been a fix or solution to this?

It's currently breaking up my development flow.

@arv
Copy link
Collaborator

arv commented Aug 24, 2016

I'm really not sure why this isn't working for you. The following works as expected:

http://google.github.io/traceur-compiler/demo/repl.html#import%20'.%2Fgenerators.js'%3B%0A

Also, what version are you using?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants