npm-install
팩키지 설치
Synopsis
npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <tarball file>
npm install <tarball url>
npm install <folder>
alias: npm i
common options: [-S|--save|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [--dry-run]
Description
팩키지와 이 패키지가 의존하고 있는 팩키지를 함께 설치합니다. 만약 팩키지에 shrinkwrap 파일이 있으면, 의존 팩키지의 설치는 이것에 의해 결정됩니다. npm-shrinkwrap을 참고.
팩키지라 함은 다음과 같습니다.
- a) package.json 파일에 의해 표현되는 프로그램을 포함하고 있는 폴더
- b) (a)를 gzip으로 압축한 파일
- c) (b)에 대한 url
- d) (c)를 통해서 레지스트리에 퍼블리쉬된 `<name>@
- e) (d)를 가리키는
<name>@<tag>
- f)
latest
로 태그된<name>
- g) (a)로 clone이 되는 git URL
여러분의 팩키지를 공개된 레지스크리에 퍼블리쉬하지 않더라도 npm을 사용함으로써 얻을 수 있는 많은 장점이 있습니다. (a) 그냥 node 프로그램을 작성할 수 도 있으며 (b) 이 프로그램을 압축해서 다른 곳에 쉽게 설치할 수 있습니다.
npm install
(팩키지 디렉터리 내에서, 인자가 없이)
로컬 node_modules 폴더에 의존 팩키지를 설치합니다.
(-g
나 --global
옵션을 지정한 경우) 글로벌 모드에서는 현재 팩키지 컨텍스트(예: 현재 작업 디렉터리)를 글로벌 팩키지로 설치합니다.
디폴트로, npm install
은 package.json에서 dependencies에 나열된 모든 모듈들을 설치합니다.
--production
플래그를 주면 (또는 NODE_ENV
환경 변수가 production
으로 설정되어 있으면), npm은 devDependencies
에 나열된 모듈들은 설치하지 않습니다.
npm install <folder>
파일 시스템 상의 해당 폴더에 들어 있는 팩키지를 설치합니다.
npm install <tarball file>
파일 시스템 상의 해당 팩키지를 설치합니다. 주의: 개발 디렉터리를 npm 최상위 경로에 단순히 링크하려고 하면 npm link
명령을 사용하면 됩니다.
npm install ./package.tgz
npm install <tarball url>
압축 파일을 url에서 내려받아서 설치합니다. "http://"나 "https://"로 옵션이 시작하는지에 따라 이 옵션을 다른 옵션과 구분합니다.
npm install https://github.com/indexzero/forever/tarball/v0.5.6
npm install [<@scope>/]<name> [-S|--save|-D|--save-dev|-O|--save-optional]
<ㅜname>@<tag>
를 설치합니다. 여기서 <tag>
는 "tag" 설정을 따릅니다. (npm-config를 참고, 디폴트 tag값은 latest
)
대부분의 경우 최신 버전의 모듈을 설치하 것입니다.
npm install sax
npm install
은 팩키지 버전을 package.json 파일에 저장하거나 업데이트하는 3가지 배타적인 옵션 플래그를 지원합니다.
-S
,--save
: 팩키지를dependencies
에 추가합니다.-D
,--save-dev
: 팩키지를devDependecies
에 추가합니다.-O
,--save-optional
: 팩키지를optionalDependencies
에 추가합니다.
위의 세 가지 중 하나를 사용해서 의존성 정보를 package.json에 삽입할 때, 추가적인 옵셔널 플래그가 지원됩니다.
-E
,--save-exact
: 의존성 팩키지의 정보를 설정할 때 npm의 디폴트 semver 버전 연산자 대신에 구체적인 버전 정보를 사용합니다.
더 나아가, npm-shrinkwrap.json
파일이 존재하면 이 파일도 같이 업데이트합니다.
<scope>
는 옵셔널입니다. 지정된 스코프에 연관된 팩키지를 레지스트리에서 다운로드합니다. 주어진 스코프에 연관된 레지스트리가 없다면 디폴트 레지스트로 가정합니다.
@-기호를 스코프 이름에 포함하지 않으면 npm은 이 이름을 GitHub 레포지토리로 인식합니다. 스코프 이름은 슬래쉬로 끝나야합니다.
npm install sax --save
npm install githubname/reponame
npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save --save-exact
주의: <name>
인 파일이나 폴더가 현재 작업 디렉터리에 존재하면 이 것을 설치하려고 시도하게 되며 이 파일이나 폴더가 유효하지 않은 경우에만 이름으로 팩키지를 가져오게 됩니다.
npm install [<@scope>/]<name>@<tag>
지정된 태그로 참조되는 팩키지의 버전을 설치합니다. 레지스트리에 해당 태그가 존재하지 않으면 실패하게됩니다.
npm install sax@latest
npm install @myorg/mypackage@latest
npm install [<@scope>/]<name>@<version>
지정된 버전의 팩키지를 설치합니다. 레지스트리에 해당 버전이 존재하지 않으면 실패하게됩니다.
npm install [email protected]
npm install @myorg/[email protected]
npm install [<@scope>/]<name>@<version range>
지정된 범위에 해당되는 버전의 패키지가 설치됩니다. package.json에서 설명한 dependecies
를 해석하는 규칙이 동일하게 적용됩니다.
버전 범위를 따옴표로 감싸서 쉘에서 하나의 인자로 인식되도록 해야합니다.
npm install sax@">=0.1.0 <0.2.0"
npm install @myorg/privatepackage@">=0.1.0 <0.2.0"
npm install <git remote url>
git 프로바이더에 호스팅된 팩키지를 git clone을 통해서 설치합니다. https(github의 git)를 통해서 먼저 시도하고 실패하는 경우 ssh를 통해서 시도하게 됩니다.
<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>]
<protocol>
은 git
, git+ssh
, git+http
, git+https
, git+file
중의 하나이어야합니다.
<commit-ish>
가 명시되지 않으면, master
를 사용하게 됩니다.
다음과 같은 git 환경변수를 npm에서 인식하여 git을 실행할 때 환경변수로 설정하게 됩니다.
GIT_ASKPASS
GIT_PROXY_COMMAND
GIT_SSH
GIT_SSH_COMMAND
GIT_SSL_CAINFO
GIT_SSL_NO_VERIFY
npm install git+ssh://[email protected]:npm/npm.git#v1.0.27
npm install git+https://[email protected]/npm/npm.git
npm install git://github.com/npm/npm.git#v1.0.27
GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://[email protected]:npm/npm.git
npm install <githubname>/<githubrepo>[#<commit-ish>]
npm install github:<githubname>/<githubrepo>[#<commit-ish>]
git을 사용하여 github의 팩키지를 설치합니다. commit-ish
가 명시되지 않으면 master
를 사용합니다.
npm install mygithubuser/myproject
npm install github:mygithubuser/myproject
npm install gist:[<githubname>/]<gistID>[#<commit-ish>]
git을 사용하여 https://gist.github.com/gistID
의 팩키지를 설치합니다. gist에 연결된 GitHub 사용자명은 선택사항이며 -S
나 --save
가 사용되면 package.json에 저장되지 않습니다.
npm install gist:101a11beef
npm install bitbucket:<bitbucketname>/<bitbucketrepo>[#<commit-ish>]
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
복수의 인자를 복합적으로 사용할 수 있을 뿐만 아니라 복수의 인자 타입을 사용할 수도 있습니다.
npm install sax@">=0.1.0 <0.2.0" bench supervisor
--tag
인자는 모든 지정된 설치 타겟에 사용될 수 있습니다. 만약 주어진 이름의 태그가 존재하면 태그된 버전이 새로운 버전보다 우선해서 선택됩니다.
--dry-run
인자는 실제로는 설치하지 않으면서 설치과정에서의 결과를 출력합니다.
-f
또는 --force
인자는 로컬에 복사본이 존재하더라도 원격의 리소스를 다운로드하도록 강제합니다.
npm install sax --force
-g
또는 --global
인자는 팩키지를 글로벌로 설치합니다.
--global-style
은 npm이 팩키지를 로컬 node_modules
에 설치하면서 글로벌 node_moudles
에 적용되는 동일한 레이아웃을 사용하도록 합니다. 직접적인 의존성 팩키지만 node_modules
에 나타나며 이 팩키지들이 의존하는 것들은 모두 평탄화(flatterned)됩니다.
--legacy-bundling
npm 1.4 이전 버전의 팩키지를 설치하도록 만듭니다.
--link
로컬 공간에 글로벌 설치본에 대한 링크를 만듭니다.
--no-bin-links
인자는 팩키지에 포함되어 있는 바이너리에 대한 심볼릭 링크를 생성하지 않도록 합니다.
--no-optional
옵셔널 의존성 팩키지를 설치하지 않도록 합니다.
--no-shrinkwrap
는 shrinkwrap 파일을 무시하고 package.json을 사용하도록 합니다.
--ㅜnodedir=/path/to/node/source
Node 소스 코드에 대한 경로를 설정하여 npm이 네이티브 모듈을 컴파일 할 수 있도록 합니다.
--only={prod[uction]|dev[elopment]}
인자는 NODE_ENV에 관계없이 devDependencies 만 설치하거나 devDependencies가 아닌 팩키지만 설치하도록 합니다.
알고리즘
npm이 따르는 팩키지설치 알고리즘입니다.
load the existing node_modules tree from disk
clone the tree
fetch the package.json and assorted metadata and add it to the clone
walk the clone and add any missing dependencies
dependencies will be added as close to the top as is possible
without breaking any other modules
compare the original tree with the cloned tree and make a list of
actions to take to convert one to the other
execute all of the actions, deepest first
kinds of actions are install, update, remove and move
팩키지 의존성이 A{B,C}, B{C}, C{D}라고 하면 이 알고리즘에 따라 다음과 같은 의존성 트리가 만들어 집니다.
A
+-- B
+-- C
+-- D
A{B,C}, B{C,D@1}, C{D@2)의 경우에는 다음과 같습니다.
A
+-- B
+-- C
`-- D@2
+-- D@1
B의 D@1이 최상위에 설치돼어 C는 D@2를 자신의 프라이빗 공간에 설치해야합니다.