티스토리 뷰

반응형

PR링크: add missing dependency on @turf/dissolve #2345

 

 

토이프로젝트로 deno fresh 라는 프레임워크를 사용한 지도 기반의 서비스를 진행하고 있다.

 

지도를 사용하다보니 지도 위에서 공간정보를 더 잘 다룰 수 있게 해주는 turf 라이브러리가 절실했다.

node 프로젝트였다면 npm 으로 쉽게 설치해서 사용했을텐데 fresh는 deno를 기반의 프로젝트이다보니까,

ES Module 형태로 라이브러리를 로드해야했다.

turf를 모듈 형태로 내려주는 CDN을 찾다가 skypack에서 제공하는 URL이 있어서 사용해봤는데 했더니 에러가 발생했다.

 

(deno fresh에서 import는 이런식으로 json 파일로 관리한다.)

{
  "imports": {
    ...
    "turf": "https://cdn.skypack.dev/@turf/turf"
  }
}

 

 

에러를 보니 @turf/dissolve가 import한 @turf/flatten의 디펜던시 버전이 없다는 것이다.

turf는 내가 만든게 아니라 단지 가져왔을 뿐인데 에러가 발생하니 이상해서 turf 리포지토리에 가서 코드를 살펴보았다.

 

turf/packages/turf-dissolve/index.js

turf-dissolve가 @turf/flatten을 import 하고 있는 것을 확인할 수 있었다.

그렇다면 디펜던시에도 명시되어 있는지 확인하면 된다.

 

turf/packages/turf-dissolve/package.json

flatten 패키지를 분명 사용하고 있는데 디펜던시에 빠져있었다.

그래서 에러가 난 것이다.

 

오랜만에 오픈소스 버그를 발견해서 부리나케 클론해서 설치하고 테스트 돌린 후에 빠져있는 디펜던시를 추가해서 PR을 날렸다.

그러자 3일 뒤, 개발 멤버가 왜 이 버그가 이제 발견된건지 모르겠다며 머지해주었다.

 

현재 turf 버전이 v6.5.0이고 2021년 7월에 릴리즈되었는데, 어느정도 완성된 라이브러리라 그런지 릴리즈 주기가 굉장히 길어서 수정 내역이 언제 릴리즈될지 모르겠다.

 

릴리즈 되어야 개발할 때 에러가 안날텐데 어떡하나 고민되었는데 다행히 turf를 ES Module 형태로 제공해주는 곳이 있었다.

esm.sh 라는 곳인데, npm 패키지를 ES Module 형식으로 제공해주는 곳이다.

import를 살펴보니 이미 esm.sh 에서 가져온 모듈이 많았는데 왜 turf는 엉뚱한데서 가져오려고 했나 모르겠다.

(그래도 그 덕분에 오픈소스에 컨트리뷰션할 수 있었다.)

 

 

-----

 

그 이후.

 

esm.sh 에서 가져온 모듈을 실행하려고 했더니 Deno 에러가 발생한다.

내부에서 동적으로 모듈을 로드하는 코드가 있으면 발생하는 현상으로 추정되는데..

Deno에서 수정중인 건지 어떻게 진행되고 있는건지는 잘 모르겠지만,

아직 신생이니 그러려니 하고 다시 skypack을 사용하는 것으로 돌아갔다.

 

turf는 최신 버전(6.5.0) 말고 과거에는 이상이 없겠거니 하고 버전을 낮추어보았는데, 계속해서 같은 에러가 나는 것이다.

결국 5년전에 릴리즈된 5.1.6 버전을 사용하기로 하였다.

반응형

'Open source' 카테고리의 다른 글

[Mapbox-gl-js] 문서에서 누락된 설명 추가  (1) 2022.10.27
댓글