Babel 6 + TS 환경에 Stylelint를 잡으면 Jest가 통과하지 못함

요 전날 Babel v7.0.0 가 마침내 공식 출시 되었습니다만, 지금 자신이 하고 있는 프로젝트에서는 번역 있어 좀 더 6 계를 사용할 예정입니다.
그렇게 하면, 경률로 node_modules 디렉토리를 삭제해 재작성하면 Jest 가 통과하지 않게 되어 곤란했으므로, 대략적인 원인과 해결 방법을 메모합니다.

전제


  • JavaScript 및 TypeScript로 개발하고 있습니다
  • JS의 트랜스 파일에는 Babel 6을 사용하고있다
  • Stylelint도 사용하고 있습니다
  • Jest도 사용하고 있습니다
  • [email protected] 사용

  • 일어난 일



    Jest가 다음과 같은 에러를 토하게 되어, TypeScript의 테스트를 패스 할 수 없게 되어 버렸다.
     FAIL  path/to/test.spec.ts
      ● Test suite failed to run
    
        TypeError: Cannot read property 'bindings' of null
    
          at Scope.moveBindingTo (node_modules/@babel/core/node_modules/@babel/traverse/lib/scope/index.js:867:13)
          at BlockScoping.updateScopeInfo (node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js:364:17)
          at BlockScoping.run (node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js:330:12)
          at PluginPass.BlockStatementSwitchStatementProgram (node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js:70:24)
          at newFn (node_modules/@babel/core/node_modules/@babel/traverse/lib/visitors.js:193:21)
          at NodePath._call (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:53:20)
          at NodePath.call (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:40:17)
          at NodePath.visit (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:88:12)
          at TraversalContext.visitQueue (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
          at TraversalContext.visitSingle (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:90:19)
    

    node_modules/@babel/core



    원인


  • stylelint를 버전 고정하지 않고 설치하여 [email protected]를 설치했습니다.
  • [email protected]의 종속 패키지 인 [email protected]의 종속성으로 인해 Babel 7 (@babel/core)이 설치되었습니다.
  • 6계와 7계는 디렉토리가 다르므로, 최상위 레벨의 node_modules에서 동시에 존재할 수 있다.

  • Jest ( [email protected] ) 는 Babel 의 6 에서도 7 에서도 움직이지만, 7 가 있으면 먼저 그쪽을 참조한다.
  • htps : // 기주 b. 이 m/쿠l시㎇k는 r/ts-㎇st/bぉb/v23. ts#L9


  • 여기에서 먼저는 쫓고 있지 않습니다만.

    대응



    우선 대응으로 Babel 7이 설치되지 않는 Stylelint 버전을 지정했습니다..babelrc[email protected] 에 의존하지 않고 Babel 7 은 들어오지 않기 때문에 이것을 채택했습니다.

    미래


    postcss-jsx 의 이 굉장한 바베리 문제는 ts-jest 로 대응되는 것 같습니다
    roadmap to next version (probably `23.10.1`) · Issue #697 · kulshekhar/ts-jest

    생각한 것 (추기)



    이것은 [email protected]까지 지워야 일어나지 않은 문제로는…

    좋은 웹페이지 즐겨찾기