felixge / node-sandboxed-module

A sandboxed node.js module loader that lets you inject dependencies into your modules.
MIT License
342 stars 42 forks source link

Error with transitive dependencies when using ES6 transfomer #40

Closed OliverJAsh closed 9 years ago

OliverJAsh commented 9 years ago

I have written an ES6 transformer. The source gets transformed just fine, but when I have transitive (nested) ES6 dependencies, I get an error.

❯ node main.js
SyntaxError: Unexpected reserved word
    at SandboxedModule._compile (/Users/Oliver/Development/tmp/sandbox-es6-require/node_modules/sandboxed-module/lib/sandboxed_module.js:236:28)
    at createInnerSandboxedModule (/Users/Oliver/Development/tmp/sandbox-es6-require/node_modules/sandboxed-module/lib/sandboxed_module.js:173:23)
    at SandboxedModule.RecursiveRequireProxy (/Users/Oliver/Development/tmp/sandbox-es6-require/node_modules/sandboxed-module/lib/sandboxed_module.js:204:27)
    at SandboxedModule.requireInterceptor (/Users/Oliver/Development/tmp/sandbox-es6-require/node_modules/sandboxed-module/lib/sandboxed_module.js:217:9)
    at Object.<anonymous> (/Users/Oliver/Development/tmp/sandbox-es6-require/foo.js:9:30)
    at SandboxedModule._compile (/Users/Oliver/Development/tmp/sandbox-es6-require/node_modules/sandboxed-module/lib/sandboxed_module.js:241:19)
    at Function.SandboxedModule.load (/Users/Oliver/Development/tmp/sandbox-es6-require/node_modules/sandboxed-module/lib/sandboxed_module.js:30:19)
    at Function.SandboxedModule.require (/Users/Oliver/Development/tmp/sandbox-es6-require/node_modules/sandboxed-module/lib/sandboxed_module.js:36:15)
    at sandboxEs6Require (/Users/Oliver/Development/tmp/sandbox-es6-require/main.js:13:26)
    at Object.<anonymous> (/Users/Oliver/Development/tmp/sandbox-es6-require/main.js:15:11)

You can see my isolated test case at https://gist.github.com/4f8b74153a2f7fdb9f70.

In my example, the dependency tree is: main > foo > bar. main requires foo as a sandboxed module, applying the ES6 source transformer. foo requires bar (using ES6 import syntax).

It seems like the ES6 source transformer does not get applied to the transitive dependency (bar).

OliverJAsh commented 9 years ago

If I change foo.js to import ./bar instead of ./bar-es6 (ES5 instead of ES6), the error disappears:

❯ node main.js
foo: bar: bar
main: foo: foo

It only happens when I have nested/transitive ES6 imports.

OliverJAsh commented 9 years ago

I have reduced my test case now. See the updated desc.

OliverJAsh commented 9 years ago

Closed in favour of #41 (reduced test case).