적시에 is-promise 2.2.0 손상에 휘말린 이야기

Node.js의 환경을 SSD에 이사해 동작을 확인하고 있었는데, yo가 인스톨 할 수 없다·동작하지 않는다고 하는 수수께끼의 현상에 휩쓸렸다. 실은 자신의 환경이 나쁜 것이 아니라, 시기 적절하게 yo 가 의존하는 단 1행의 함수를 제공한다 is-promise 가 망가진 직후에 인스톨 한 것이 원인이라고 알았다.

다른 모듈에서는 Node.js의 버전이 오르고 움직이지 않게 되는 케이스에서는 대응이 늦어지는 일이 있었으므로, 이번은 곧 처치되어 럭키였다. (모르는 것만으로 일상적으로 일어나고 있을지도 모르지만)

일어난 현상


yo를 설치하면 제대로 작동하는지 확인하는 Yeoman Doctor가 실행됩니다. 여기서 yo --version에서 오류가 발생했습니다. 이 후 yo 를 실행해도, 같은 에러로 기동조차 하지 않는 상황이 되었다.
> [email protected] postinstall K:\nodejs\npm_global\node_modules\yo
> yodoctor


Yeoman Doctor
Running sanity checks on your system

√ No .bowerrc file in home directory
√ Global configuration file is valid
√ NODE_PATH matches the npm root
√ No .yo-rc.json file in home directory
√ Node.js version
Error: Command failed: C:\WINDOWS\system32\cmd.exe /s /c "yo "--version""
internal/modules/cjs/loader.js:584
            if (e.code !== 'ERR_PACKAGE_PATH_NOT_EXPORTED') throw e;
                                                            ^

Error [ERR_INVALID_PACKAGE_TARGET]: Invalid "exports" main target "index.js" defined in the package config /K:/nodejs/npm_global/node_modules/yo/node_modules/is-promise\package.json
    at resolveExportsTarget (internal/modules/cjs/loader.js:542:13)
    at resolveExportsTarget (internal/modules/cjs/loader.js:581:20)
    at applyExports (internal/modules/cjs/loader.js:455:14)
    at resolveExports (internal/modules/cjs/loader.js:508:23)
    at Function.Module._findPath (internal/modules/cjs/loader.js:632:31)
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:1001:27)
    at Function.Module._load (internal/modules/cjs/loader.js:884:27)
    at Module.require (internal/modules/cjs/loader.js:1074:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (K:\nodejs\npm_global\node_modules\yo\node_modules\run-async\index.js:3:17) {
  code: 'ERR_INVALID_PACKAGE_TARGET'
}

오류의 원인



오류 메시지에서 알 수 있듯이 run-async가 사용하는 is-promise에서 ERR_INVALID_PACKAGE_TARGET npm is-promise 페이지 을 보면 다음과 같이 빌드 오류가 발생했다고 표시됩니다. 30분 정도 전에 Publish된 버전에서 무슨 일이 있었는지...

is-promise 의 GitHub에는 Issue가 이미 게시되었으며 동일한 오류가 발생했음을 알 수 있습니다. (여기서 처음으로, 자신의 환경이 문제가 아닐지도…라고 알았다)


원인은. 이렇게). 이번 버전에서 추가된 기능이 나쁨을 버린 모양.
Package.json incorrectly formatted #12

그 후 에서 수정이 있었고 풀 요청이 발행되었습니다.
[BUGFIX] Use correct paths for CJS and ESM compatibility #15

우선, 조금 기다리면 반영될지도 모르기 때문에 기다려 본다. Weekly download 1000만을 넘는 스테디셀러 모듈이 약간의 실수로 다양한 모듈에 영향을 주는 것은…

잠정 대책



우선 문제가 일어나고 있는 것은 yo 의 글로벌 인스톨이 사용하고 있다 run-async 그래서, yo 의 node_modules 이하의 run-asyncpackage.json 0으로 고정한다. is-promise를 변경한 후 package.json 폴더에서 run-async를 실행하고 npm install의 2.1.0을 설치합니다.

package.json
  "dependencies": {
    "is-promise": "2.1.0"  元々は "^2.1.0" だった
  },

이 처리 후에, is-promise 를 실행하면 움직이게 되었다.
>yo
? 'Allo! What would you like to do? (Use arrow keys)
  Run a generator
> Code
  ──────────────
  Update your generators
  Install a generator
  Find some help
  Get me out of here!
(Move up and down to reveal more choices)

그 후



2.2.0에서 3시간 후에 2.2.2가 출시되었다. 다시 한 번 yo 시도해 보면 성공적으로 설치할 수있었습니다. 빨리 대응해 주셔서 좋았습니다 ...
Yeoman Doctor
Running sanity checks on your system

√ No .bowerrc file in home directory
√ Global configuration file is valid
√ NODE_PATH matches the npm root
√ No .yo-rc.json file in home directory
√ Node.js version
√ npm version
√ yo version

Everything looks all right!

좋은 웹페이지 즐겨찾기