Open3
LernaのESMパッケージの困り事をresolutionsで解決した
lerna
のv8以降、たまにCIが落ちる。
/home/runner/work/markuplint/markuplint/node_modules/wide-align/align.js:2
var stringWidth = require('string-width')
^
Error [ERR_REQUIRE_ESM]: require() of ES Module /home/runner/work/markuplint/markuplint/node_modules/string-width/index.js from /home/runner/work/markuplint/markuplint/node_modules/wide-align/align.js not supported.
Instead change the require of index.js in /home/runner/work/markuplint/markuplint/node_modules/wide-align/align.js to a dynamic import() which is available in all CommonJS modules.
at Object.<anonymous> (/home/runner/work/markuplint/markuplint/node_modules/wide-align/align.js:2:19)
at Object.<anonymous> (/home/runner/work/markuplint/markuplint/node_modules/gauge/lib/render-template.js:2:13)
at Object.<anonymous> (/home/runner/work/markuplint/markuplint/node_modules/gauge/lib/plumbing.js:3:22)
at Object.<anonymous> (/home/runner/work/markuplint/markuplint/node_modules/gauge/lib/index.js:2:16)
at Object.<anonymous> (/home/runner/work/markuplint/markuplint/node_modules/npmlog/lib/log.js:3:13)
at Object.<anonymous> (/home/runner/work/markuplint/markuplint/node_modules/lerna/dist/index.js:10993:31)
at Object.<anonymous> (/home/runner/work/markuplint/markuplint/node_modules/lerna/dist/cli.js:12:3) {
code: 'ERR_REQUIRE_ESM'
}
Node.js v18.19.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
結論
package.json
に次を追加
"resolutions": {
"lerna/**/string-width": "4",
"lerna/**/strip-ansi": "6",
"lerna/**/wrap-ansi": "7"
}
何が起こっている
- Lernaが深く依存しているパッケージのバージョンのいくつかがCommonJSの頃のまま
- Lernaとは別からこれらパッケージの最新に依存させているが、それらはESM
- Lernaから呼び出すときにCommonJSの呼び出し方(つまり
require()
)でESMのバージョンをつかってしまう - LernaからはCommonJSのパッケージを使うことを明示しないといけない