NPM 패키지 배포, 처음으로 사용한 npm publish와 ENEEDAUTH 오류 해결기.

작성 : 2023-11-05수정 : 2023-11-05

목차 펼치기

 npm에 배포된 화면

npm에 배포된 화면

머리말

gatsby-source-notion-feely

플러그인을 작업하고 이제 npm에 배포할 일만 남았다. 항상 Consumer로 접근하던 세상에 Provider로 접근한다는 게 꽤 많이 두근거리고 설렌다.

npm publish

명령어 한 줄이면 npm 서버로 올라갈텐데, 나는 무엇을 더 신경쓰고 어떻게 배포를 진행해야 할까 고민했던 내용에 대해 정리해본다.


Readme 작성

이 플러그인에 대한 소개와 사용방법 등을 담은 Readme는 다른 사람들에게 작업물을 내보일 때 필수적이다. 어떤 형식으로 작성해야 좋을 지를 고민하며 이틀은 꼬박 작성했던 것 같다. 이런 성격의 글을 제대로 작성하는 것은 처음인 것 같아 새롭고 또 많이 어려웠다. 더 잘 읽힐 수 있는 Readme를 위한 고민은 아직도 하고 있다.



package.json 작성

npm 배포 전 이 라이브러리에 대한 설명을

package.json

파일에 같이 명시하면 좋다.


  • name

    • 라이브러리 이름

  • version

    • 라이브러리 버전

  • description

    • 라이브러리 소개

  • keywords

    • 라이브러리를 소개하기 위한 키워드

  • author

    • 개발자 이름

  • license

    • 라이센스 규약

  • homepage

    • 소개 페이지

  • bugs

    • 버그 제보를 받을

      email

      url
  • repository

    • 리포지토리 경로

  • publishConfig

    • publish 할 때 사용할 설정

    • registry를 설정할 때 사용했다.


예시

json
1{
2	"name": "gatsby-source-notion-feely",
3	"version": "1.0.2",
4	"description": "Gatsby plugin that can connect with multiple Notion Database using official API",
5	"keywords": [
6		"gatsby",
7		"gatsby-plugin",
8		"notion",
9		"notion-database"
10	],
11	"author": "Ethan Lee <dearlsh94@gmail.com> (https://github.com/dearlsh94)",
12	"license": "0BSD",
13	"homepage": "https://github.com/dearlsh94/gatsby-source-notion-feely",
14	"bugs": {
15		"url": "https://github.com/dearlsh94/gatsby-source-notion-feely/issues",
16		"email": "dearlsh94@gmail.com"
17	},
18	"repository": {
19		"type": "git",
20		"url": "git+https://github.com/dearlsh94/gatsby-source-notion-feely.git"
21	},
22	"publishConfig": {
23		"@dearlsh94:registry": "https://npm.pkg.github.com/"
24	},
25	...
26}

publish를 위한 package.json 작성 예시



NPM 배포하기

0. npm 사이트 회원가입

npmjs

공식 홈페이지에서 회원가입을 진행한다.


1. npm 로그인

bash
1$ npm login
2$ npm whoami

터미널에서

$ npm login

커맨드를 입력하면 별도의 웹 사이트가 열리는데 여기서 로그인을 진행한다.

이후

$ npm whoami

커맨드를 입력하면 로그인 된 사용자의 아이디가 표시된다.


2. 배포하기

bash
1$ npm info {package-name}
2$ npm publish
$ npm publish

커맨드를 입력하면 바로 npm 패키지 저장소에 배포가 진행된다. 단, 중복된 이름의 패키지는 배포할 수 없으니

$ npm info {package-name}

커맨드를 통해 이미 등록된 이름인지 확인해보면 좋다.


이렇게 무사히 배포가 되었다면 행복했겠지만… 예상치 못한 오류가 발생했다.


ENEEDAUTH 오류 해결하기

bash
1npm ERR! code ENEEDAUTH
2npm ERR! need auth This command requires you to be logged in to https://registry-url
3npm ERR! need auth You need to authorize this machine using npm adduser

두근거리는 마음으로

npm publish

커맨드를 입력했으나, ENNEDAUTH 오류가 발생했다.


결론적으로는

Github의 가이드대로 registry 설정을 해주니 해결되었다

.npmrc

파일과

package.json

파일에 registry 관련 설정을 진행해주었다.

json
1@dearlsh94:registry=https://npm.pkg.github.com

.npmrc

json
1"publishConfig": {
2	"@dearlsh94:registry": "https://npm.pkg.github.com/"
3},

package.json


아래 내용은 그 전까지 삽질한 내용이다.


계속 시도하는 로그인

registry-url에 로그인이 필요하다는 것인데,

$ npm login

$ npm whoami

명령어를 얼마나 실행했는 지 모른다. 하지만 위의 오류는 npm이 아닌 registry와 관련된 오류로 나는 큰 착각을 하고 있었던 것이다.


Scope 설정

일부 글에서는 scope 설정을 통해 해결했다는 내용들이 있는데, scope는 모든 사람들에게 공개할 것인지 일부 사용자나 조직에만 공개할 것인지를 설정할 수 있는 것으로 public scope로 publish하는 별도의 명령어를 사용해보기도 했다.

bash
1$ npm publish --access public

조금 더 찾아보니 별도로 scope를 설정하지 않을 경우, 즉 unscoped 상태일 경우에는 모든 사용자에게 자동으로 공개된다. 오류를 해결하는 데에는 효과가 없던 방법이었다.


추가적으로 Scope 별 자세한 스펙은 공식 문서에서 확인할 수 있다.


부록. registry란?

아무래도 registry라는 것에 대해 더 알아봐야할 것 같았다. 이를 위해 여러 문서를 둘러보다 Github의 가이드를 발견하고 해결할 수 있게 되었다.


공식 npm Docs에서는

registry

를 이렇게 소개한다.

To resolve packages by name and version, npm talks to a registry website that implements the CommonJS Package Registry specification for reading package info.

패키지의 이름과 버전을 식별하기 위한 정보로, npm은 기본적으로

https://registry.npmjs.org

를 사용하며 사용자가 자체적으로 구성할 수도 있다고 한다.



꼬리말

한 번의 패키지 배포를 경험했지만 여전히 낯설고 어려운게 많다. 그동안 다른 Readme나 문서를 읽으며 잘 되어 있네, 설명이 부족하네, 등 평가했던 기억들이 낯부끄럽게 떠오르며 읽기 쉬운 Readme 형식에 대해 고민하게 되었다. package나 registry의 개념 등에 대해서는 여전히 내 것으로 이해했다고 말하기 어렵다. 다만, 새로운 세상에 대한 설레임이 더욱 크다.




국경의 긴 터널을 빠져나오자, 설국이었다.

-

가와바타 야스나리, <설국>

Wanna get in touch?

All Icons byiconiFy