mirror of https://github.com/node-red/node-red.git
Support loading ESM via dynamic import rather than require
parent
6ba9127a2c
commit
d0585801e4
|
|
@ -356,10 +356,19 @@ function loadNodeSet(node) {
|
|||
} else {
|
||||
}
|
||||
try {
|
||||
var r = require(node.file);
|
||||
// Babel related workaround, references in comment below.
|
||||
r = r.__esModule ? r.default : r;
|
||||
return createLoadPromise(node, r);
|
||||
let importPromise = import(node.file);
|
||||
return importPromise
|
||||
.then(function(moduleNamespaceObject) {
|
||||
// CJS will always have default, ESM might have default. (details in note below)
|
||||
let r = moduleNamespaceObject.default ? moduleNamespaceObject.default : moduleNamespaceObject;
|
||||
// Babel related workaround, references in comment below.
|
||||
r = r.__esModule ? r.default : r;
|
||||
return createLoadPromise(node, r);
|
||||
})
|
||||
.catch(function(err) {
|
||||
node.err = err;
|
||||
return Promise.resolve(node);
|
||||
});
|
||||
} catch(err) {
|
||||
node.err = err;
|
||||
var stack = err.stack;
|
||||
|
|
@ -384,6 +393,12 @@ function loadNodeSet(node) {
|
|||
return Promise.resolve(node);
|
||||
}
|
||||
|
||||
// Notes on default:
|
||||
// https://nodejs.org/api/esm.html#import-expressions
|
||||
// "When importing CommonJS modules, the module.exports object is provided as the default export."
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import
|
||||
// "The module namespace object is a sealed object ... with the default export available as a key called `default`."
|
||||
|
||||
// Notes on __esModule:
|
||||
// Workaround originally added in commit 326f3469, merged in pull request #3669.
|
||||
// Related links:
|
||||
|
|
|
|||
|
|
@ -626,7 +626,7 @@ describe("red/nodes/registry/loader",function() {
|
|||
node.enabled.should.be.true();
|
||||
nodes.registerType.called.should.be.false();
|
||||
node.should.have.property('err');
|
||||
node.err.toString().should.eql("Error: fail to require (line:1)");
|
||||
node.err.toString().should.eql("Error: fail to require");
|
||||
|
||||
done();
|
||||
}).catch(function(err) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue