This question already has an answer here:

This works:

import app from './../app.js';

But this doesn't:

import app from path.join(process.cwd(), 'app');

I'm Getting:

SyntaxError: /path/file.js: Unexpected token (5:16)
> 5 | import app from path.join(process.cwd(), 'app');
    |                 ^

It is possible (and/or how) to use "dynamic" paths? (not hardcoding the path or rely in relative paths).

share

marked as duplicate by Felix Kling javascript May 20 '15 at 4:14

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

    
And yes, path is imported before app. – Félix Sanz May 20 '15 at 3:59
up vote 40 down vote accepted

No, this is not possible. ES6 modules need to be able to statically resolve their dependencies, without executing module code, so that import statements do work reliably. The module specifier must be a string literal.

However, the module loader of your choice should support dynamic loading of modules with variable names. You wouldn't be able to get a bound app identifier in your module scope however (and cannot reexport it), it typically would only be available in a callback or so.

share

ES6 imports are declarative and meant for static analysis. They cannot be dynamic.

Generally the expectation would be that if you had some conditional imports, it would be the responsibility of the underlying path resolution logic to decide what module to load based on some static path.

That or you'd use the async module loader rather than declarative imports.

share

Not the answer you're looking for? Browse other questions tagged or ask your own question.