bevry-archive / lazy-require

Sponsor this project to keep it maintained, or use Deno instead.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Incompatible with node 0.10

Ajnasz opened this issue · comments

The package is a dependecy of another package I would I use (docpad) on node 0.10.* . Currently i can't, because lazy-require depends on the Symbol datatype.

Do you have any suggestion how can I solve the issue?

Here is a simplifed example, by only requireing the package in node 0.10.45:

$ node -v
v0.10.45
11:46 ajnasz@masina:~/tmp/ff $ npm -v
2.15.1
11:46 ajnasz@masina:~/tmp/ff $ npm install lazy-require
11:47 ajnasz@masina:~/tmp/ff $ cat a.js
require('lazy-require');

And when I try to run the script:

$ node a.js

/home/ajnasz/tmp/ff/node_modules/lazy-require/source/index.js:51
        let result = lazyRequire.require(name, opts)
            ^^^^^^
Error: The package lazy-require has no suitable edition for this environment, the last edition failed with:
Error: Unable to load package lazy-require edition at /home/ajnasz/tmp/ff/node_modules/lazy-require/es2015/index.js with syntax:
es2015, javascript, require
Error: The package safeps has no suitable edition for this environment, the last edition failed with:
Error: Unable to load package safeps edition at /home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/es2015/index.js with syntax:
es2015, javascript, require
ReferenceError: Symbol is not defined
    at custom (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/node_modules/taskgroup/node_modules/extendr/es2015/index.js:26:29)
    at Object.defaults (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/node_modules/taskgroup/node_modules/extendr/es2015/index.js:110:16)
    at new TaskGroup (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/node_modules/taskgroup/es2015/lib/taskgroup.js:490:11)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/es2015/index.js:38:29)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.requirePackage (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/editions/es2015/index.js:78:25)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/index.js:3:38)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/node_modules/lazy-require/es2015/index.js:10:14)
    at Module._compile (module.js:456:26)
    at Object.requirePackage (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/editions/es2015/index.js:88:8)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/index.js:3:38)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/node_modules/lazy-require/es2015/index.js:10:14)
    at Module._compile (module.js:456:26)
    at Object.requirePackage (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/editions/es2015/index.js:78:25)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/node_modules/lazy-require/index.js:3:38)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/a.js:1:63)
    at Module._compile (module.js:456:26)
    at Object.requirePackage (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/editions/es2015/index.js:88:8)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/node_modules/lazy-require/index.js:3:38)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/ajnasz/tmp/ff/a.js:1:63)
    at Module._compile (module.js:456:26)```

Update: Moved comment to docpad/docpad#1008 (comment) and closing this, as supporting legacy environments is more a use case for DocPad and its users, rather than for a module.

Actually, onus is on this module too as https://github.com/bevry/lazy-require/blob/master/package.json#L58 is incorrect then. Will create a separate issue.

Actually, the error log above points to at custom (/home/ajnasz/tmp/ff/node_modules/lazy-require/node_modules/safeps/node_modules/taskgroup/node_modules/extendr/es2015/index.js:26:29) which is https://github.com/bevry/extendr and which https://github.com/bevry/extendr/blob/master/package.json doesn't include any engines, which seems like a regression, will fix over there.

Okay, v3.2.1 of extendr is released (with the correct engines field), and v3.2.0 is unpublished. So npm should be intelligent and install the last version that was compatible with node 0.10, or provide the suitable warning for users who need to use it. Further discussion should happen over at that DocPad issue. Thanks for the report!

I've released v1.1.2 of editions that will display the error hierarchy in a more sensible way, so the failure location of why an edition fails should be more obvious