ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSR: 새로운 Javascript 패키지 레지스트리
    Javascript 2024. 3. 2. 20:02

    JSR: 새로운 Javascript 패키지 레지스트리

     

    최근에 JSR이라는 용어가 화제가 되고 있습니다.

     

    JSRJavaScript Registry의 약자로, 다음 세대 JavaScript/TypeScript 패키지 레지스트리를 의미합니다.

    이 글은 JSR에 대한 작성자의 단편적인 정보를 모아 작성한 것입니다. 오류가 포함되어 있을 수 있습니다. 그럴 경우 지적해 주시면 감사하겠습니다.

    npm과 어떤 점이 다를까요?

    npmNode Package Manager의 약자로, 이름 그대로 Node.js용으로 개발된 패키지 매니저 및 해당 패키지 매니저가 사용하는 레지스트리입니다.

     

    그 편리함 때문에 Node.js 이외의 브라우저나 다른 런타임에서도 사용됩니다.

     

    예를 들어 Svelte는 브라우저용 패키지이지만, Node.js의 패키지 매니저인 npm 레지스트리에 등록되어 있습니다.

     

    Node.js를 위해 만들어진 만큼 다음과 같은 단점이 있습니다.

    • TypeScript 미지원
      • TypeScript 파일을 그대로 게시하거나 빌드하여 게시할 수 있지만, 스마트하지 않습니다.
    • ESM에 미달하는 경우가 있음
      • CJS 패키지가 많이 있습니다.

    반면, JSR은 다음과 같은 특징을 가지고 있습니다.

    • 순수 TypeScript 지원
      • TypeScript를 그대로 게시할 수 있는 것 같습니다.
      • Node.js 등을 위해 .d.ts 파일도 자동으로 생성해 줍니다.
    • ESM
      • ESM 패키지만 게시할 수 있어 현대적입니다.

    또한 결정적인 차이로 역할의 차이가 있습니다.

     

    npm은 패키지 매니저/레지스트리입니다.

     

    반면 JSR은 레지스트리입니다. 패키지 매니저의 역할을 하지 않습니다.

     

    예를 들어, Node.js에서 @std/assert 패키지를 설치하려면 다음과 같은 명령을 사용합니다.

    npx jsr add @std/assert

     

    "뭐야, 패키지 매니저잖아"라고 생각했을 수도 있습니다.

     

    그러나 이 명령은 패키지 매니저가 아닙니다.

     

    이해를 돕기 위해 단계를 살펴보겠습니다.


    먼저, 이 명령을 실행하면 package.json이 다음과 같이 업데이트됩니다.

    "dependencies": {
    	"@std/assert": "npm:@jsr/std__assert"
    }

     

    그런 다음 npm의 경우 .npmrc, Bun의 경우 bunfig.toml 등에 @jsr:https://npm.jsr.io로 해결하는 코드를 추가합니다.


    마지막으로 npm i로 종속성을 설치하면 완료됩니다.

     

    jsr 명령은 npm을 사용할 때 jsr을 편리하게 사용할 수 있도록 도와주는 래퍼입니다.

     

    패키지 매니저가 아닙니다.


    참고로, https://npm.jsr.ioJSR 패키지를 npm용으로 변환하여 배포하는 서버인 것 같습니다.


    Deno를 위해 만들어진

    JSR은 Deno를 위해 만들어진 것으로 알려져 있습니다.

     

    다음 세대¹의 위치를 차지하고 있죠.

     

    그래서 Deno에는 JSR을 위한 다양한 기능이 탑재되어 있습니다.

    • jsr: import
      import * as package from 'jsr:@xxx/xxx@version'

    와 같이 JSR 패키지를 다운로드하여 사용할 수 있습니다.

    • deno add *
      위의 방법은 deno.land/x와 같이 버전 관리가 어려운 경우입니다.
    // deno.json
    {
      "imports": {
        "@std/assert": "jsr:@std/assert@^0.218.2"
      }
    }

     

    이렇게 importMap을 사용하여 deno.land/x와 유사한 방식으로 설정할 수 있습니다.

     

    이를 더 간단하게 만드는 것이 deno add입니다.

    deno add @std/assert

     

    를 실행하면 됩니다.

    • deno publish
      deno.json에
    {
      "name": "@scope/package",
      "version": "1.0.0",
      "exports": "./mod.ts"
    }

     

    를 추가하면 deno publish로 간단하게 공개할 수 있습니다.

     

    JSR을 공개할 수 있는겁니다.


    기타 기능

    • JSDOC에서 자동으로 문서 생성
    • 패키지 스코어링
    • GitHub Actions를 통한 간결한 자동 publish

    마지막으로

    JSR, 정말 멋져보이는데요.

     

    분산형이 아니라는 점이 조금 아쉽긴 하네요.

     

    그럼.

Designed by Tistory.