lezer-parser/lezer

Rollup/yarn 2 plugin import error

jeeger opened this issue · 5 comments

I'm trying to create a new codemirror language, and I'm using yarn 2 and rollup. I've successfully built lang-sql with yarn 1, but changing configuration to yarn 2 leads to an error.

 $ git clone git@github.com:codemirror/lang-sql.git .
 $ yarn
<success>
$ yarn set version berry
$ yarn prepare

[!] Error: Qualified path resolution failed - none of the candidates can be found on the disk.

Source path: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup.js
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup.json
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup.node

Require stack:
- /home/jeeger/projects/javascript/codemirror-sql/rollup.config.js
- /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/rollup-npm-2.39.0-d94e133c08-b504b080e4.zip/node_modules/rollup/dist/shared/loadConfigFile.js
- /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/rollup-npm-2.39.0-d94e133c08-b504b080e4.zip/node_modules/rollup/dist/bin/rollup
Error: Qualified path resolution failed - none of the candidates can be found on the disk.

Source path: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup.js
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup.json
Rejected candidate: /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/lezer-generator-npm-0.13.3-8a5a172e1d-17078428db.zip/node_modules/lezer-generator/rollup.node

Require stack:
- /home/jeeger/projects/javascript/codemirror-sql/rollup.config.js
- /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/rollup-npm-2.39.0-d94e133c08-b504b080e4.zip/node_modules/rollup/dist/shared/loadConfigFile.js
- /home/jeeger/projects/javascript/codemirror-sql/.yarn/cache/rollup-npm-2.39.0-d94e133c08-b504b080e4.zip/node_modules/rollup/dist/bin/rollup
    at internalTools_makeError (/home/jeeger/projects/javascript/codemirror-sql/.pnp.cjs:7063:34)
    at resolveUnqualified (/home/jeeger/projects/javascript/codemirror-sql/.pnp.cjs:8102:13)
    at resolveRequest (/home/jeeger/projects/javascript/codemirror-sql/.pnp.cjs:8126:14)
    at Object.resolveRequest (/home/jeeger/projects/javascript/codemirror-sql/.pnp.cjs:8198:26)
    at Function.external_module_.Module._resolveFilename (/home/jeeger/projects/javascript/codemirror-sql/.pnp.cjs:7296:34)
    at Function.external_module_.Module._load (/home/jeeger/projects/javascript/codemirror-sql/.pnp.cjs:7161:48)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (/home/jeeger/projects/javascript/codemirror-sql/rollup.config.js:6:14)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)

The problem seems to be the extra dist directory in the lezer-generator-npm package. Is there a way to work around this error?

I really have no idea—as far as I'm aware lezer-generator is a valid npm package. I don't know why yarn 2 would have trouble loading it.

I think the problem is that lezer-generator does not reference src/rollup-plugin-lezer.ts in src/index.ts, and thus it's not included in the file generated by rollup when the package is built.
I've managed to work around it by using import {lezer} from "lezer-generator/dist/rollup-plugin-lezer.cjs", but that took some working around.

I think the problem is that lezer-generator does not reference src/rollup-plugin-lezer.ts in src/index.ts, and thus it's not included in the file generated by rollup when the package is built.

No, that's intentional. It's distributed in dist/rollup-plugin-lezer.{cjs,es.js}, and should be included as "lezer-generator/rollup". Is it possible that some tool you're using just doesn't handle the exports field in package.json yet?

From my reading of the yarn 1 and 2 documentation, neither of them knows about a "exports" field in package.json, so I think I'm misunderstanding here.

Since I was able to produce the bug with a official project, I think there's a misconfiguration/compatibility issue somewhere in the build system. If you think incompatibility with yarn 2 is a bug, feel free to close this!

Yarn 2's PnP got exports support in yarnpkg/berry#2431 but it hasn't been released yet, you can update to the source version and see if that fixes it.

yarn set version from sources