netlify-cli cannot be run with Yarn Plug'n'Play
Describe the bug
After trying to upgrade netlify-cli from 8.0.5 in our project that uses Yarn PnP (aka. Yarn Berry, version 3.1.1), running netlify via Yarn is no longer possible, likely due to introducing ESM. Even after enabling experimental ESM support in Yarn (by adding pnpEnableEsmLoader: true to .yarnrc.yml) and adding netlify as a direct dependency to our project, I get the following error message:
$ yarn netlify deploy
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'netlify' imported from /Users/ville/Repos/web/.yarn/unplugged/netlify-cli-npm-8.1.8-13d7da449b/node_modules/netlify-cli/src/commands/base-command.js
Did you mean to import netlify-npm-10.0.0-ece5d3e4fa-12c14075e4.zip/node_modules/netlify/src/index.js?
at new NodeError (internal/errors.js:322:7)
at packageResolve (internal/modules/esm/resolve.js:687:9)
at moduleResolve (internal/modules/esm/resolve.js:728:18)
at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:842:11)
at Loader.resolve (internal/modules/esm/loader.js:89:40)
at Loader.getModuleJob (internal/modules/esm/loader.js:242:28)
at Loader.import (internal/modules/esm/loader.js:177:28)
at importModuleDynamically (internal/modules/cjs/loader.js:1028:27)
at exports.importModuleDynamicallyCallback (internal/process/esm_loader.js:30:14)
at Object.<anonymous> (/Users/ville/Repos/web/.yarn/unplugged/netlify-cli-npm-8.1.8-13d7da449b/node_modules/netlify-cli/src/commands/base-command.js:10:18) {
code: 'ERR_MODULE_NOT_FOUND'
}
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'netlify' imported from /Users/ville/Repos/web/.yarn/unplugged/netlify-cli-npm-8.1.8-13d7da449b/node_modules/netlify-cli/src/commands/base-command.js
Did you mean to import netlify-npm-10.0.0-ece5d3e4fa-12c14075e4.zip/node_modules/netlify/src/index.js?
at new NodeError (internal/errors.js:322:7)
at packageResolve (internal/modules/esm/resolve.js:687:9)
at moduleResolve (internal/modules/esm/resolve.js:728:18)
at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:842:11)
at Loader.resolve (internal/modules/esm/loader.js:89:40)
at Loader.getModuleJob (internal/modules/esm/loader.js:242:28)
at Loader.import (internal/modules/esm/loader.js:177:28)
at importModuleDynamically (internal/modules/cjs/loader.js:1028:27)
at exports.importModuleDynamicallyCallback (internal/process/esm_loader.js:30:14)
at Object.<anonymous> (/Users/ville/Repos/web/.yarn/unplugged/netlify-cli-npm-8.1.8-13d7da449b/node_modules/netlify-cli/src/commands/base-command.js:10:18) {
code: 'ERR_MODULE_NOT_FOUND'
}
/Users/ville/Repos/web/.yarn/cache/netlify-redirector-npm-0.2.1-6757cc04ec-991533d072.zip/node_modules/netlify-redirector/lib/redirects.js:116
throw ex;
^
abort({"code":"ERR_MODULE_NOT_FOUND"}) at Error
at jsStackTrace (/Users/ville/Repos/web/.yarn/cache/netlify-redirector-npm-0.2.1-6757cc04ec-991533d072.zip/node_modules/netlify-redirector/lib/redirects.js:1070:13)
at stackTrace (/Users/ville/Repos/web/.yarn/cache/netlify-redirector-npm-0.2.1-6757cc04ec-991533d072.zip/node_modules/netlify-redirector/lib/redirects.js:1087:12)
at process.abort (/Users/ville/Repos/web/.yarn/cache/netlify-redirector-npm-0.2.1-6757cc04ec-991533d072.zip/node_modules/netlify-redirector/lib/redirects.js:8502:44)
at process.emit (events.js:400:28)
at processPromiseRejections (internal/process/promises.js:245:33)
at processTicksAndRejections (internal/process/task_queues.js:96:32)
(Use `node --trace-uncaught ...` to show where the exception was thrown)
The only way I can get netlify-cli to work is to pin netlify-cli to 8.0.5 and add the following to packages.json:
"resolutions": {
"netlify": "9",
"@netlify/config": "16.0.4",
"@netlify/zip-it-and-ship-it": "5.1.0"
}
To Reproduce
Steps to reproduce the behavior:
- In a project that uses Yarn PnP, install the latest version of
netlify-cli:yarn up neltify-cli@^8.1.8 - Try running the CLI tool:
yarn netlify
Configuration
N/A
Expected behavior
I would expect the CLI tool to work.
CLI Output
N/A
Additional context
See #3840 for the previous issue I had with getting newer versions of the package built with Yarn PnP.