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.

https://github.com/markuplint/markuplint/actions/runs/7307999054/job/19922350736

ゆうてんゆうてん

結論

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のパッケージを使うことを明示しないといけない