Node: import does not work correctly

Created on 28 Dec 2019  路  9Comments  路  Source: nodejs/node

node v13.2.0

examples

import { createAdapter, map, runEffect, now } from 'https://unpkg.com/@direktspeed/[email protected]/core.mjs'
/*
 node stream-web-element.mjs 
(node:739700) ExperimentalWarning: The ESM module loader is experimental.
internal/modules/esm/default_resolve.js:94
  let url = moduleWrapResolve(specifier, parentURL);
            ^

Error: Cannot find module /@direktspeed/[email protected]/core.mjs imported from /home/frank//es-streams/docs/stream-web-element.mjs
    at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:94:13)
    at Loader.resolve (internal/modules/esm/loader.js:74:33)
    at Loader.getModuleJob (internal/modules/esm/loader.js:148:40)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:41:40)
    at link (internal/modules/esm/module_job.js:40:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}
*/

dynamic also but diffrent error

import('https://unpkg.com/@direktspeed/[email protected]/core.mjs')
    .then(({ createAdapter, map, runEffect, now }) => {}).catch(console.log)

/*
node stream-web-element.mjs 
(node:739810) ExperimentalWarning: The ESM module loader is experimental.
Error: Cannot find module /@direktspeed/[email protected]/core.mjs imported from /home/frank/es-streams/docs/stream-web-element.mjs
    at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:94:13)
    at Loader.resolve (internal/modules/esm/loader.js:74:33)
    at Loader.getModuleJob (internal/modules/esm/loader.js:148:40)
    at Loader.import (internal/modules/esm/loader.js:132:28)
    at importModuleDynamically (internal/modules/esm/translators.js:76:36)
    at exports.importModuleDynamicallyCallback (internal/process/esm_loader.js:31:14)
    at file:///home/frank/docker/apps/stealify/es-streams/docs/stream-web-element.mjs:12:1
    at ModuleJob.run (internal/modules/esm/module_job.js:109:37)
    at async Loader.import (internal/modules/esm/loader.js:133:24) {
  code: 'ERR_MODULE_NOT_FOUND'
}
*/

it looks like he stripps the http domain part and only uses path maybe i need to define a base url or what happens there?

ES Modules experimental

Most helpful comment

Node's esm loader does not support loading from http(s) urls currently.

We likely could offer a better error message though.

All 9 comments

cc @nodejs/modules-active-members

Node's esm loader does not support loading from http(s) urls currently.

We likely could offer a better error message though.

it appears that it was turned into a file path without verifying that the scheme was file:. we should definitely fix that.

Wow ok so i will need a special import helper that does fetch eval thanks for pointing that out.

can some one point me to a similar code example that implaments import?

var m = require('module')
var src = 'module.exports = 42'
var res = require('vm').runInThisContext(m.wrap(src))(exports, require, module, __filename, __dirname)
console.log(module.exports)

If you're looking to use import to pull in an HTTP URL into an ES module context, that's not possible at present. #30986 would allow for you to use a loader to do so, and there's an example of an HTTP loader in that PR.

can be closed i have writen the universal loader of my dreams :)

@GeoffreyBooth
This is my loader Implamentation that accepts strings and exports them as ESM Module without eval :)

Was this page helpful?
0 / 5 - 0 ratings