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
Windows 시스템이므로 다음 명령을 사용하십시오.
npm install npm -g
Taobao 미러를 사용하는 명령:
npm install -g cnpm --registry=https://registry.npm.taobao.org로그인 후 복사
npm 명령을 사용하여 모듈 설치
npm install Node.js 모듈 구문 형식은 다음과 같습니다.
$ npm install <Module Name>
다음 예에서는 npm 명령을 사용하여 일반적으로 사용되는 Node.js 웹 프레임워크 모듈 express를 설치합니다.
$ npm install express
설치 후 express 패키지는 프로젝트 디렉터리 아래의 node_modules 디렉터리에 있으므로 필수 항목만 필요합니다. ('express')를 타사 패키지 경로를 지정하지 않고 코드에 추가합니다.
var express = require('express');
글로벌 설치와 로컬 설치
npm 패키지 설치는 로컬 설치(로컬)와 글로벌 설치(글로벌) 두 가지로 나뉘는데, 명령줄에서 판단하면 -가 있는지 여부만 다릅니다. 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 디렉터리가 없으면 현재 npm 명령이 실행되는 디렉터리에 node_modules 디렉터리가 생성됩니다.
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 list -g ├─┬ cnpm@4.3.2 │ ├── auto-correct@1.0.0 │ ├── bagpipe@0.3.5 │ ├── colors@1.1.2 │ ├─┬ commander@2.9.0 │ │ └── graceful-readlink@1.0.1 │ ├─┬ cross-spawn@0.2.9 │ │ └── lru-cache@2.7.3 ……
모듈의 버전 번호를 보려면 다음 명령을 사용할 수 있습니다.
$ npm list grunt projectName@projectVersion /path/to/project/folder └── grunt@0.4.1
Use 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 - 패키지에 대한 설명입니다.
홈페이지 - 패키지의 공식 웹사이트 URL입니다.
author - 패키지 작성자의 이름입니다.
contributors - 패키지에 대한 다른 기여자의 이름입니다.
dependent - 종속 패키지 목록입니다. 종속 패키지가 설치되지 않은 경우 npm은 node_module 디렉터리에 종속 패키지를 자동으로 설치합니다.
repository - 패키지 코드가 저장되는 장소 유형으로 git 또는 svn일 수 있으며 git은 Github에 있을 수 있습니다.
main - 기본 필드는 프로그램의 기본 항목 파일을 지정하며 require('moduleName')은 이 파일을 로드합니다. 이 필드의 기본값은 모듈 루트 디렉터리 아래의 index.js입니다.
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) runoob # 模块名 version: (1.0.0) description: Node.js 测试模块(www.runoob.com) # 描述 entry point: (index.js) test command: make test git repository: https://github.com/runoob/runoob.git # Github 地址 keywords: author: license: (ISC) About to write to ……/node_modules/package.json: # 生成地址 { "name": "runoob", "version": "1.0.0", "description": "Node.js 测试模块(www.runoob.com)", …… } 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三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。
如果只是修复bug,需要更新Z位。
如果是新增了功能,但是向下兼容,需要更新Y位。
如果有大变动,向下不兼容,需要更新X位。
版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。
NPM支持的所有版本号范围指定方式可以查看官方文档。
NPM 常用命令
除了本章介绍的部分外,NPM还提供了很多功能,package.json里也有很多其它有用的字段。
除了可以在【https://npmjs.org/doc/】查看官方文档外,这里再介绍一些NPM常用命令。
NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。
NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。
使用npm help
在package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。
使用npm update
使用npm update
使用npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。
使用npm unpublish
使用淘宝 NPM 镜像
大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
这样就可以使用 cnpm 命令来安装模块了:
$ cnpm install [name]
更多信息可以查阅:http://npm.taobao.org/。
위 내용은 NPM 사용 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!