Closed
Description
Glue code with -s EXPORT_ES6
doesn’t load in Node as it relies on __dirname
, which doesn’t exist for modules.
Repro
package.json
to set package to module mode
{
"name": "emscriptenes6",
"type": "module"
}
// test.c
int thething() {
return 4;
}
Compile with:
$ emcc -O3 --closure 1 -o test.js -s ENVIRONMENT=node -s EXPORT_ES6=1 -s EXPORTED_FUNCTIONS="_thething" test.c
// main.js
import factory from "./test.js";
async function main() {
await factory();
}
main();
Run in Node:
node main.js
file:///Users/surma/src/scratch/emscriptenes6/test.js:10
var a;a||(a=typeof Module !== 'undefined' ? Module : {});var f,g;a.ready=new Promise(function(b,d){f=b;g=d});var h={},l;for(l in a)a.hasOwnProperty(l)&&(h[l]=a[l]);var m="",n,p,q,r;m=__dirname+"/";n=function(b){q||(q=require("fs"));r||(r=require("path"));b=r.normalize(b);return q.readFileSync(b,null)};p=function(b){b=n(b);b.buffer||(b=new Uint8Array(b));b.buffer||t("Assertion failed: undefined");return b};1<process.argv.length&&process.argv[1].replace(/\\/g,"/");process.argv.slice(2);
^
ReferenceError: __dirname is not defined
at file:///Users/surma/src/scratch/emscriptenes6/test.js:10:182
at main (file:///Users/surma/src/scratch/emscriptenes6/main.js:4:9)
at file:///Users/surma/src/scratch/emscriptenes6/main.js:6:1
at ModuleJob.run (node:internal/modules/esm/module_job:175:25)
at async Loader.import (node:internal/modules/esm/loader:178:24)
at async Object.loadESM (node:internal/process/esm_loader:68:5)
Metadata
Metadata
Assignees
Labels
No labels