1、NPM使用介绍菜鸟教程NPM使用介绍NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。由于新版的nodejs已经集成了npm,所以之前叩m也一并安装好了。同样可以通过输入npm-v来测试是否成功安装。命令如下,出现版本提示表示安装成功:$npm-v2.3.0令来升级,命令如下:$sudon
2、pminstallnpm-g/usr/local/bin/npm-/usr/local/lib/node_modules/npm/bin/npm-cli.jsnpm2.14.2/usr/local/lib/node_modules/npm如果是Window系统使用以下命令即可:npminstallnpm-g使用淘宝镜像的命令:cnpminstallnpm-g使用npm命令安装模块npm安装Node.js模块语法格式如下:$npminstall以下实例,我们使用npm命令安装常用的Node.jsweb框架模块express:$npm
3、installexpress安装好之后,express包就放在了工程目录下的node_modules目录中,因此在代码中只需要通过require(express)的方式就好,无需指定第三方包路径。varexpress=require(express);全局安装与本地安装npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如npminstallexpress#本地安装npminstallexpress-g#全局安装如果出现以下错误:npmerr!Error:connect
4、ECONNREFUSED:8087解决办法为:$npmconfigsetproxynull本地安装1.将安装包放在./node_modules下(运行npm命令时所在的目录),如果没有node_modules目录,会在当前执行npm命令的目录下生成node_modules目录。2.可以通过require()来引入本地安装的包全局安装1.将安装包放在/usr/local下或者你node的安装目录2.可以直接在命令行里使用。如果你希望具备两者功能,则需要在两个地方安装它或使用npmlink。接下来我们使用全局方式安装
5、express$npminstallexpress-g安装过程输出如下内容,第一行输出了模块的版本号及安装位置。express4.13.3node_modules/expressescape-html1.0.2range-parser1.0.2merge-descriptors1.0.0array-flatten1.1.1cookie0.1.3utils-merge1.0.0parseurl1.3.0cookie-signature1.0.6methods1.1.1fresh0.3.0vary1.0.1path-to-regexp0.1.7content-type1.0.1et
6、ag1.7.0serve-static1.10.0content-disposition0.5.0depd1.0.1qs4.0.0finalhandler0.4.0(unpipe1.0.0)on-finished2.3.0(ee-first1.1.1)proxy-addr1.0.8(forwarded0.1.0,ipaddr.js1.0.1)debug2.2.0(ms0.7.1)type-is1.6.8(media-typer0.3.0,mime-types2.1.6)accepts1.2.12(negotiator0.5.3,mime-types2.1.6)send0.1
8、ojectVersion/path/to/project/folder1grunt0.4.1使用package.jsonpackage.json位于模块的目录下,用于定义包的属性。接下来让我们来看下express包的package.json文件,位于node_modules/express/package.json内容:name:express,description:Fast,unopinionated,minimalistwebframework,version:4.13.3,author:name:TJHolowaychuk,email:tj
9、vision-media.ca,contributors:name:AaronHeckmann,email:aaron.heckmann+github,name:CiaranJessup,email:ciaranj,name:DouglasChristopherWilson,email:doug,name:GuillermoRauch,email:rauchg,name:JonathanOng,email:me,name:RomanShtylman,email:shtylman+expressjs,name:YoungJaeSim,email:
10、hanulhanul.me,license:MIT,repository:type:git,url:git+,homepage: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,
11、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:
12、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,multi
13、party:4.1.2,vhost:3.0.1,engines:node:=0.10.0,files:LICENSE,History.md,Readme.md,index.js,lib/,scripts:test:mocha-requiretest/support/env-reporterspec-bail-check-leakstest/test/acceptance/,test-ci:istanbulcovernode_modules/mocha/bin/_mocha-reportlcovonly--requiretest/support/en
14、v-reporterspec-check-leakstest/test/acceptance/,test-cov:istanbulcovernode_modules/mocha/bin/_mocha--requiretest/support/env-reporterdot-check-leakstest/test/acceptance/,test-tap:mocha-requiretest/support/env-reportertap-check-leakstest/test/acceptance/,gitHead:ef7ad681b245f
15、ba023843ce94f6bcb8e275bbb8e,bugs:url:,_id:express4.13.3,_shasum:ddb2f1fb4502bf33598d2b032b037960ca6c80a3,_from:express*,_npmVersion:1.4.28,_npmUser:name:dougwilson,email:doug,maintainers:name:tjholowaychuk,email:tjvision-media.ca,name:jongleberry,email:jonathanrichardong,name:dougwils
17、/express/-/express-4.13.3.tgz,readme:ERROR:NoREADMEdatafound!Package.json属性说明name-包名。version-包的版本号。description-包的描述。homepage-包的官网url。author-包的作者姓名。contributors-包的其他贡献者姓名。dependencies-依赖包列表。如果依赖包没有安装,npm会自动将依赖包安装在node_module目录下。repository-包代码存放的地方的类型,可以是
18、git或svn,git可在Github上。main-main字段指定了程序的主入口文件,require(moduleName)就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。keywords-关键字卸载模块我们可以使用以下命令来卸载Node.js模块。$npmuninstallexpress卸载后,你可以到/node_modules/目录下查看包是否还存在,或者使用以下命令查看:$npmls更新模块我们可以使用以下命令更新模块:$npmupdateexpress搜索模块使用以下来搜索模块:$npmsea
19、rchexpress创建模块创建模块,package.json文件是必不可少的。我们可以使用NPM生成package.json文件,生成的文件包含了基本的结$npminitThisutilitywillwalkyouthroughcreatingapackage.jsonfile.Itonlycoversthemostcommonitems,andtriestoguesssensibledefaults.Seenpmhelpjsonfordefinitivedocumentationonthesefieldsan
20、dexactlywhattheydo.Usenpminstall-saveafterwardstoinstallapackageandsaveitasadependencyinthepackage.jsonfile.PressACatanytimeto:(node_modules)runoob#模块名version:(1.0.0)description:Node.js测试模块()#描述entrypoint:(index.js)testcommand:maketestgitrepositor
22、mail:(thisISpublic)mcmohd接下来我们就用以下命令来发布模块:$npmpublish如果你以上的步骤都操作正确,你就可以跟其他模块一样使用npm来安装。版本号使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下。语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。如果只是修复bug,需要更新Z位。如果是新增了功能,但是向下兼容,需要更新Y位。如果有大变动,向下不兼容,需要更新X位。版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如argv:0.0.x表示依赖于0.0.x系列的最新版argv。NPM支持的所有版本号范围指定方式可以查看官方文档。NPM常用命令除了本章介绍的部分外,NPM还提供了很多功能,package.json里也有