NPM 사용 소개
NPM은 NodeJS와 함께 설치되는 패키지 관리 도구로 NodeJS 코드 배포의 많은 문제를 해결할 수 있습니다. 일반적인 사용 시나리오는 다음과 같습니다.
사용자가 NPM 서버에서 다른 사람이 작성한 타사 패키지를 다운로드할 수 있습니다. 그들의 지역 사용.
사용자가 로컬 사용을 위해 NPM 서버에서 다른 사람이 작성한 명령줄 프로그램을 다운로드하고 설치할 수 있습니다.
사용자가 다른 사람이 사용할 수 있도록 NPM 서버에 작성한 패키지나 명령줄 프로그램을 업로드할 수 있습니다.
새 버전의 nodejs에 npm이 통합되었으므로 이전 npm도 설치되었습니다. "npm -v" 를 입력하여 설치 성공 여부를 테스트할 수도 있습니다. 명령은 다음과 같습니다. 버전 프롬프트가 나타나면 설치가 성공한 것입니다.
$ npm -v 2.3.0
이전 버전의 npm을 설치하는 경우 npm 명령을 통해 쉽게 업그레이드할 수 있습니다.
$ sudo npm install npm -g /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js npm@2.14.2 /usr/local/lib/node_modules/npm
Window 시스템이라면 다음 명령을 사용하세요:
npm install npm -g
npm 명령을 사용하여 모듈
npm을 설치하세요. Node.js 모듈 설치 구문 형식은 다음과 같습니다.
$ npm install <Module Name>
다음 예에서는 다음을 사용합니다. 일반적으로 사용되는 Node.js 웹 프레임워크 모듈을 설치하기 위한 npm 명령express:
$ npm install express
설치 후 express 패키지는 프로젝트 디렉터리 아래 node_modules 디렉터리에 있으므로 require('express'만 사용하면 됩니다. ) 타사 패키지 경로를 지정하지 않고 코드에 추가합니다.
var express = require('express');
글로벌 설치와 로컬 설치
npm 패키지 설치는 로컬 설치(local)와 글로벌 설치(global) 두 가지로 나뉘는데, 명령줄에서 판단해 보면 -g 등이 있는지 여부만 다르다.
npm install express # 本地安装 npm install express -g # 全局安装
다음 오류가 발생하는 경우:
npm err! Error: connect ECONNREFUSED 127.0.0.1:8087
해결 방법은 다음과 같습니다.
$ npm config set proxy null
로컬 설치
1 설치 패키지를 ./node_modules(npm 명령을 실행하는 디렉터리) 아래에 놓습니다. node_modules 디렉터리에 있을 것입니다. node_modules 디렉터리는 현재 npm 명령이 실행되는 디렉터리에 생성됩니다.
2. 로컬에 설치된 패키지는 require()를 통해 도입할 수 있습니다.
전역 설치
1. 설치 패키지를 /usr/local 또는 노드의 설치 디렉터리에 놓습니다.
2. 명령줄에서 직접 사용할 수 있습니다.
두 기능을 모두 사용하려면 두 위치 모두에 설치하거나 npm 링크를 사용해야 합니다.
다음으로 전역 방법을 사용하여 express
$ npm install express -g
를 설치합니다. 설치 프로세스는 다음 내용을 출력합니다. 첫 번째 줄은 모듈의 버전 번호와 설치 위치를 출력합니다.
express@4.13.3 node_modules/express ├── escape-html@1.0.2 ├── range-parser@1.0.2 ├── merge-descriptors@1.0.0 ├── array-flatten@1.1.1 ├── cookie@0.1.3 ├── utils-merge@1.0.0 ├── parseurl@1.3.0 ├── cookie-signature@1.0.6 ├── methods@1.1.1 ├── fresh@0.3.0 ├── vary@1.0.1 ├── path-to-regexp@0.1.7 ├── content-type@1.0.1 ├── etag@1.7.0 ├── serve-static@1.10.0 ├── content-disposition@0.5.0 ├── depd@1.0.1 ├── qs@4.0.0 ├── finalhandler@0.4.0 (unpipe@1.0.0) ├── on-finished@2.3.0 (ee-first@1.1.1) ├── proxy-addr@1.0.8 (forwarded@0.1.0, ipaddr.js@1.0.1) ├── debug@2.2.0 (ms@0.7.1) ├── type-is@1.6.8 (media-typer@0.3.0, mime-types@2.1.6) ├── accepts@1.2.12 (negotiator@0.5.3, mime-types@2.1.6) └── send@0.13.0 (destroy@1.0.3, statuses@1.2.1, ms@0.7.1, mime@1.3.4, http-errors@1.3.1)
다음 명령을 사용하면 전역적으로 설치된 모든 모듈을 볼 수 있습니다.
$ npm ls -g
package.json 사용
package.json은 모듈의 디렉터리에 있으며 패키지의 속성을 정의하는 데 사용됩니다. 다음으로 node_modules/express/package.json에 있는 express 패키지의 package.json 파일을 살펴보겠습니다. 내용:
{ "name": "express", "description": "Fast, unopinionated, minimalist web framework", "version": "4.13.3", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "contributors": [ { "name": "Aaron Heckmann", "email": "aaron.heckmann+github@gmail.com" }, { "name": "Ciaran Jessup", "email": "ciaranj@gmail.com" }, { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" }, { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }, { "name": "Jonathan Ong", "email": "me@jongleberry.com" }, { "name": "Roman Shtylman", "email": "shtylman+expressjs@gmail.com" }, { "name": "Young Jae Sim", "email": "hanul@hanul.me" } ], "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/strongloop/express.git" }, "homepage": "http://expressjs.com/", "keywords": [ "express", "framework", "sinatra", "web", "rest", "restful", "router", "app", "api" ], "dependencies": { "accepts": "~1.2.12", "array-flatten": "1.1.1", "content-disposition": "0.5.0", "content-type": "~1.0.1", "cookie": "0.1.3", "cookie-signature": "1.0.6", "debug": "~2.2.0", "depd": "~1.0.1", "escape-html": "1.0.2", "etag": "~1.7.0", "finalhandler": "0.4.0", "fresh": "0.3.0", "merge-descriptors": "1.0.0", "methods": "~1.1.1", "on-finished": "~2.3.0", "parseurl": "~1.3.0", "path-to-regexp": "0.1.7", "proxy-addr": "~1.0.8", "qs": "4.0.0", "range-parser": "~1.0.2", "send": "0.13.0", "serve-static": "~1.10.0", "type-is": "~1.6.6", "utils-merge": "1.0.0", "vary": "~1.0.1" }, "devDependencies": { "after": "0.8.1", "ejs": "2.3.3", "istanbul": "0.3.17", "marked": "0.3.5", "mocha": "2.2.5", "should": "7.0.2", "supertest": "1.0.1", "body-parser": "~1.13.3", "connect-redis": "~2.4.1", "cookie-parser": "~1.3.5", "cookie-session": "~1.2.0", "express-session": "~1.11.3", "jade": "~1.11.0", "method-override": "~2.3.5", "morgan": "~1.6.1", "multiparty": "~4.1.2", "vhost": "~3.0.1" }, "engines": { "node": ">= 0.10.0" }, "files": [ "LICENSE", "History.md", "Readme.md", "index.js", "lib/" ], "scripts": { "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/", "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/" }, "gitHead": "ef7ad681b245fba023843ce94f6bcb8e275bbb8e", "bugs": { "url": "https://github.com/strongloop/express/issues" }, "_id": "express@4.13.3", "_shasum": "ddb2f1fb4502bf33598d2b032b037960ca6c80a3", "_from": "express@*", "_npmVersion": "1.4.28", "_npmUser": { "name": "dougwilson", "email": "doug@somethingdoug.com" }, "maintainers": [ { "name": "tjholowaychuk", "email": "tj@vision-media.ca" }, { "name": "jongleberry", "email": "jonathanrichardong@gmail.com" }, { "name": "dougwilson", "email": "doug@somethingdoug.com" }, { "name": "rfeng", "email": "enjoyjava@gmail.com" }, { "name": "aredridel", "email": "aredridel@dinhe.net" }, { "name": "strongloop", "email": "callback@strongloop.com" }, { "name": "defunctzombie", "email": "shtylman@gmail.com" } ], "dist": { "shasum": "ddb2f1fb4502bf33598d2b032b037960ca6c80a3", "tarball": "http://registry.npmjs.org/express/-/express-4.13.3.tgz" }, "directories": {}, "_resolved": "https://registry.npmjs.org/express/-/express-4.13.3.tgz", "readme": "ERROR: No README data found!" }
Package.json 속성 설명
name - 패키지 이름.
version - 패키지의 버전 번호입니다.
description - 패키지에 대한 설명입니다.
homepage - 패키지의 공식 웹사이트 URL입니다.
author - 패키지의 작성자 이름입니다.
contributors - 패키지에 대한 다른 기여자의 이름입니다.
dependent - 종속성 패키지 목록. 종속 패키지가 설치되지 않은 경우 npm은 node_module 디렉터리에 종속 패키지를 자동으로 설치합니다.
repository - 패키지 코드가 저장되는 장소 유형은 git 또는 svn일 수 있으며 git은 Github에 있을 수 있습니다.
main - 기본 필드는 프로그램의 기본 프로젝트에 대한 포인터인 모듈 ID입니다. 즉, 패키지 이름이 express이고 사용자가 이를 설치하는 경우 require("express")입니다.
keywords - 키워드
모듈 제거
다음 명령을 사용하여 Node.js 모듈을 제거할 수 있습니다.
$ npm uninstall express
제거한 후 /node_modules/ 디렉터리로 이동하여 패키지가 아직 존재하는지 확인하거나 다음 명령을 사용하여 확인할 수 있습니다.
$ npm ls
Update module
다음 명령을 사용하여 업데이트할 수 있습니다. 모듈:
$ npm update express
모듈 검색
다음을 사용하여 모듈 검색:
$ npm search express
모듈 만들기
모듈을 만들려면 package.json 파일이 필수적입니다. NPM을 사용하여 package.json 파일을 생성할 수 있으며 생성된 파일에는 기본 결과가 포함됩니다.
$ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (node_modules) php # 模块名 version: (1.0.0) description: Node.js 测试模块(www.php.cn) # 描述 entry point: (index.js) test command: make test git repository: https://github.com/php/php.git # Github 地址 keywords: author: license: (ISC) About to write to ……/node_modules/package.json: # 生成地址 { "name": "php", "version": "1.0.0", "description": "Node.js 测试模块(www.php.cn)", …… } Is this ok? (yes) yes
본인의 상황에 맞게 위 정보를 입력하셔야 합니다. 마지막에 "yes"를 입력하면 package.json 파일이 생성됩니다.
다음으로 다음 명령을 사용하여 npm 저장소에 사용자를 등록할 수 있습니다(등록하려면 이메일 사용).
$ npm adduser Username: mcmohd Password: Email: (this IS public) mcmohd@gmail.com
다음으로 다음 명령을 사용하여 모듈을 게시합니다.
$ npm publish
위 단계를 올바르게 수행한 경우, 다른 모듈과 마찬가지로 npm을 사용하여 설치할 수 있습니다.
버전 번호
NPM을 사용하여 코드를 다운로드하고 게시할 때 버전 번호를 알게 됩니다. NPM은 의미론적 버전 번호를 사용하여 코드를 관리합니다.
의미론적 버전 번호는 X.Y.Z의 세 자리로 구분되며 각각 메이저 버전 번호, 마이너 버전 번호, 패치 버전 번호를 나타냅니다. 코드가 변경되면 다음 원칙에 따라 버전 번호가 업데이트됩니다.
버그만 수정한다면 Z비트 업데이트가 필요합니다.
새로운 기능이 추가되었지만 이전 버전과 호환되는 경우 Y 비트를 업데이트해야 합니다.
큰 변경 사항이 있는 경우 이전 버전과 호환되지 않으며 X 비트를 업데이트해야 합니다.
이 버전 번호 보장을 통해 타사 패키지 종속성을 선언할 때 고정된 버전 번호에 의존하는 것 외에도 특정 버전 번호 범위에 의존할 수도 있습니다. 예를 들어, "argv": "0.0.x"는 0.0.x 시리즈의 최신 버전 argv에 의존한다는 의미입니다.
NPM에서 지원하는 모든 버전 번호 범위 지정 방법은 공식 문서에서 확인할 수 있습니다.
일반적인 NPM 명령
이 장에서 소개한 부분 외에도 NPM은 많은 기능을 제공하며 package.json에는 기타 유용한 필드가 많이 있습니다.
npmjs.org/doc/에서 공식 문서를 보는 것 외에도 다음은 몇 가지 일반적인 NPM 명령입니다.
NPM은 설치, 게시 등 다양한 명령을 제공합니다. npm help를 사용하면 모든 명령을 볼 수 있습니다.
NPM은
install
및publish
와 같은 많은 명령을 제공합니다. 모든 명령을 보려면npm help
를 사용하세요.install
和publish
,使用npm help
可查看所有命令。使用
npm help <command>
可查看某条命令的详细帮助,例如npm help install
。在
package.json
所在目录下使用npm install . -g
可先在本地安装当前命令行程序,可用于发布前的本地测试。使用
npm update <package>
可以把当前目录下node_modules
子目录里边的对应模块更新至最新版本。使用
npm update <package> -g
可以把全局安装的对应命令行程序更新至最新版。使用
npm cache clear
可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。使用
npm unpublish <package>@<version>
npm help install
과 같은 명령에 대한 자세한 도움말을 보려면 npm help <command>
를 사용하세요. package.json
이 있는 디렉터리에서 npm install -g
를 사용하여 로컬 테스트에 사용할 수 있는 현재 명령줄 프로그램을 먼저 로컬에 설치하세요. 출시 전. 🎜🎜🎜🎜npm update <package>
를 사용하여 현재 디렉터리의 node_modules
하위 디렉터리에 있는 해당 모듈을 최신 버전으로 업데이트하세요. 🎜🎜🎜🎜전역적으로 설치된 해당 명령줄 프로그램을 최신 버전으로 업데이트하려면 npm update <package> -g
를 사용하세요. 🎜🎜🎜🎜새 버전의 코드를 릴리스하기 위해 동일한 버전 번호를 사용하는 사람들을 처리하는 데 사용되는 NPM 로컬 캐시를 지우려면 npm 캐시 지우기
를 사용하세요. 🎜🎜🎜🎜 게시한 코드 버전을 게시 취소하려면 npm unpublish <package>@<version>
을 사용하세요. 🎜🎜🎜🎜