본문 바로가기

node.js (OctoberSkyJs)

[node basic] npm faq

* 현재 따라배우기가 조금 어렵다는 이야기가 있어서 기본내용을 배우는 시리즈를 올려보려고 합니다. 첫 번째는 npm에 대한 FAQ입니다. 짧고도 재밌으니까 꼭 읽어보세요! *



npm은 노드 패키지 매니저 입니다. node 모듈들을 자동으로 설치해 주죠. 그런데 npm에 대해서는 그다지 많은 이야기가 없는 것 같습니다. 자료를 찾아보다가 npm FAQ가 재밌고도 학습에 도움이 되어서 함께 보실수 있도록 번역해 봅니다.

npm 공식사이트인 npmjs.org로 접속하거나 커맨드 라인에서 npm faq라고 타이핑하면 볼 수 있습니다. 전 npm 1.0 커맨드라인 버전을 기준으로 작업하였습니다. :)



npm faq - frequently asked question


HTML로 된 문서는 어디에서 볼 수 있죠?

http://npmjs.org/doc/, 혹은 다음과 같이 실행:

   npm config set viewer browser

이제 man 페이지가 아닌 웹 브라우저로 문서를 엽니다.


npm이 동작을 안해요.

질문이 아닌데요?

       

왜 동작을 안할까요?

저도 아직 모르겠네요. 
에러 출력을 읽으세요. 그리고 뭔 소린지 모르겠으면, 하라는 대로 하시고, 필요한 정보와 함께 버그로 올리세요. 


npm은 내려받은 것들을 어디에 두나요?

npm help folders 라고 실행해보세요.

- npm root 명령어를 사용하면 모듈이 어디로 가는지 볼 수 있어요. npm bin 이라고 치면 실행파일들은 어디로 가는지 볼 수 있고요.
- 글로벌(Global)로 설치한 것들은 로컬(local)과 다른 곳에 있어요. 만약 뭔가 설치할때 -g 플래그를 주었으면 실행파일은 npm bin -g 에 해당하는 위치로 그리고 모듈들은 npm root -g 에 대항하는 위치로 가요.
 



어디서든 쓰고 싶으면 어떻게 인스톨 하죠?

글로벌 인스톨을 하세요. 인스톨 할때 -g 혹은 --global 태그를 명령어 뒤에 붙이면 되요.

 
제가 뭔가를 글로벌로 설치했거든요. 그런데 'require()'를 쓸수가 없어요.

로컬로 설치하세요.


싫어요!

npm link 를 살펴보세요. 맘에 들거에요.


안할래요. 전 0.x 버전대의 스타일 '모든걸 글로벌로!' 스타일을 원해요.

OK. 알았어요. 이렇게 해보세요.


echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.bashrc
. ~/.bashrc
npm config set global true

추천 하고 싶진 않네요. 이런식으로 하면 많은게 잘 안될거에요. 깨진다고 불평하기 전에 npm help config와 npm help global을 확실히 읽고 이해해야 해요. 잘못했다는 생각이 들면, 다음처럼 해서 되돌리세요.

npm config delete global --local



'npm'이 약어라면, 왜 대문자로 표시하지 않죠?

많은 사람들의 믿음과는 달리 'npm'은 사실 "Node Package Manager"의 머리글자를 딴 약어가 아니에요. 재귀적인 "npm is not an acronym"에 대한 재귀적인 바크로니믹이에요. ninaa라고 이름지었으면 머리글자를 딴 약어가 맞겠지만, 그렇지 않으니까 약어가 아닌거죠. 

"NPM"은 사실 머리글자를 딴 약어가 맞죠. (좀 더 정확하게 말하자면 capitonym이고요) National Association of Pastoral Musicians (국립 목회 음악가 협회)를 나타냅니다. http://npm.org/ 를 보면 좀 더 알 수 있습니다.

소프트웨어 쪽에선 "NPM"은 크리스 로덴이 만든 non-parametric mapping 유틸리티를 뜻합니다. http://www.cabiatl.com/mricro/npm/ 을 보세요.

열매를 맺게 만들어준 첫번째 씨앗은 "pm"이라고 이름붙은 bash 유틸리티였습니다. "pkgmakeinst"의 축약형 후손이었죠. bash 함수였는데 다양한 종류의 것들을 다양한 플랫폼에 설치하는데 쓰였고, 야후의 yinst 사용에 흔히 쓰였죠. 만약 npm이 무언가에 대한 약어였다면, node pm 혹은 new pm 이었을겁니다.

따라서, 진지하게 이야기하면, "npm"프로젝트는 앞서 말한 커맨드라인 유틸리티로부터 이름을 따온겁니다. 그리고 QUERTY 키보드 레이아웃을 사용하는 오른손잡이 프로그래머가 반찌 끼우는 손가락(약지, 중지)만으로 쉽게 타이핑할 수 있도록 정한겁니다. 커맨드 라인은 늘 그렇듯 당연 소문자구요.

 
설치된 패키지들의 목록을 보려면 어떻게 하나요?

npm ls



패키지는 어떻게 찾죠?

npm search

인자들은 grep (유닉스 명령어) 이에요. npm search jsdom 하면 jsdom 패키지를 보여줘요.



npm은 어떻게 업데이트 하죠?

npm update npm -g

인자없이 npm update 만 실행하면 로컬 패키지들을 모두 업데이트 할 수 있어요. 글로벌 패키지들은 npm update -g 라고 하면되요. 


만약 정상설치 안되면 다음처럼 실행해 보세요.
curl http://npmjs.org/install.sh | sh 



'패키지'는 뭔가요?

패키지는

a) package.json 파일에 설명이 쓰여져 있는, 프로그램이 들어 있는 폴더 
b) (a)를 포함하고 있는 gzipped tarball
c) (b)가 되는 url
d) (c)로 등록되어 퍼블리싱된 <이름>@<버전>
e) (d)를 지칭하는 <이름>@<태그>
f) (e)를 만족시키는 "latest" 태그가 붙은 <이름>  (예. express@latest )
g) clone했을때 (a)가 되는 git url

패키지를 퍼블리싱 하지 않았을지라도, 단지 node 프로그램 작성을 원한다면 (a), 그리고 tarball로 팩킹한 후 다른 곳에서 쉽게 인스톨 하길 원할 경우(b) 여전히 많은 장점을 얻을 수 있어요.  

Git url도 해당 경우가 될 수 있어요. 

           git://github.com/user/project.git#commit-ish
           git+ssh://user@hostname:project.git#commit-ish
           git+http://user@hostname/project/blah.git#commit-ish
           git+https://user@hostname/project/blah.git#commit-ish

commit-ish 는 어떤 태그든, sha 든, 혹은 git 체크아웃을 용 인자가 되는 브랜치 등 뭐든 될 수 있죠. 기본값은 master 에요.



어떻게하면 npm과 함께 node를 인스톨 할 수 있을까요?

못해요. 다음중 하나를 시도해 보세요.

o   http://github.com/isaacs/nave

o   http://github.com/visionmedia/n

o   http://github.com/creationix/nvm
 



어떻게 하면 npm을 개발용으로 쓸 수 있을까요?

npm help developers 그리고 npm help json 살펴보세요


개발 폴더를 npm link 하길 가장 원할 것 같습니다. 그렇게 하는건 끝내주게 쉬워요.

사설 레지스트리를 만들려면, npm help registry를 살펴보세요.



의존성을 url 목록으로 만들수 있나요?

네. root 폴더에 package.json을 가진 단일폴더로 만들고, 그 폴더를 gzipped tarball 묶은 url 혹은 gir url이 될 수 있습니다. (위쪽 부분의 "패키지가 뭔가요?" 부분을 보세요) 

 
재 설치 하지 않아도 되고 dev 폴더에 symlink를 만들 순 없나요?

npm help link를 보세요.

 

패키지 레지스트리 웹사이트. 대체 그게 뭐요?

npm help registry 를 보세요.


비보안 채널에 대한 경고는 어떻게 처리 하나요?

node 0.4.10 전까지는 큰 파일들을 HTTPS로 보내는데 문제가 있었습니다. 해당 버전의 node에서는 기본적으론 HTTP로 퍼블리싱한다는 뜻입니다.


패스워드를 까먹어서 퍼블리싱을 못해요. 어떻게 리셋하죠?

ECONNREFUSED가 많이 발생하는데요. 뭐가문제죠?

레지스트리가 다운 되었거나 node의 DNS가 찾지 못하는 거에요. Cygwin 단계별 문서의 단계들을 모두 따라하지 않았을 경우 많이 발생해요. 레지스트리가 다운되었는지 확인하려면, http://registry.npmjs.org/-/short 를 브라우저로 열어보세요. 어떤 이유로 인터넷 연결이 안되는 건지 알려줄거에요.

만약 레지스트리가 다운되었다면, 이메일로 알려주거나 이슈를 등록해서 알려주세요. 제가 때려서 말을 듣게 해 놓겠습니다.

 

npm은 누가 만드나요?

npm view npm author

npm view npm contributors


여기에 없는 질문이나 요청은 어디서 하죠?

메일링 리스트나 이슈로 등록해 주세요.

o   npm-@googlegroups.com
o   http://github.com/isaacs/npm/issues 

 
왜 npm은 절 미워할까요?

npm은 누굴 미워할만한 재주가 없어요. 모두를 사랑해요. 특히 당신을요.



SEE ALSO
       o   npm help npm

       o   npm help developers

       o   npm help json

       o   npm help config

       o   npm help folders