如何使⽤NPM?CNPM⼜是什么?
背景介绍
什么是npm?
npm(node package manager)是nodejs的包管理器,⽤于node插件管理(包括安装、卸载、管理依赖等), NPM是随同NodeJS⼀起安装的包管理⼯具,能解决NodeJS代码部署上的很多问题,它是 Node 获得成功的重要原因之⼀。常见的使⽤场景有以下⼏种:
允许⽤户从NPM服务器下载别⼈编写的第三⽅包到本地使⽤。
允许⽤户从NPM服务器下载并安装别⼈编写的命令⾏程序到本地使⽤。
允许⽤户将⾃⼰编写的包或命令⾏程序上传到NPM服务器供别⼈使⽤。
由于新版的nodejs已经集成了npm,所以之前npm也⼀并安装好了。同样可以通过输⼊ "npm -v" 来测试是否成功安装
为啥我们需要⼀个包管理⼯具呢?因为我们在Node.js上开发时,会⽤到很多别⼈写的JavaScript代码。
如果我们要使⽤别⼈写的某个包,每次都根据名称搜索⼀下官⽅⽹站,下载代码,解压,再使⽤,⾮常繁琐。于是⼀个集中管理的⼯具应运⽽⽣:⼤家都把⾃⼰开发的模块打包后放到npm官⽹上,如果要使⽤,直接通过npm安装就可以直接⽤,不⽤管代码存在哪,应该从哪下载。jquery在项目里是干啥的
更重要的是,如果我们要使⽤模块A,⽽模块A⼜依赖于模块B,模块B⼜依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们⾃⼰⼿动管理,肯定既⿇烦⼜容易出错。
什么是cnpm?
因为npm安装插件是从国外服务器下载,受⽹络影响⼤,可能出现异常,所以我们乐于分享的淘宝团队⼲了这事。来⾃官⽹:“这是⼀个完整 镜像,你可以⽤此代替官⽅版本(只读),同步频率⽬前为 10分钟 ⼀次以保证尽量与官⽅服务同步。”
知识剖析
npm insta ll m o duleN a mes:安装N o de模块
m es:安装N
安装完毕后会产⽣⼀个node_modules⽬录,其⽬录下就是安装的各个node模块。
no de的安装分为全局模式和本地模式。
⼀般情况下会以本地模式运⾏,包会被安装到和你的应⽤程序代码的本地node_modules⽬录下。
在全局模式下,Node包会被安装到Node的安装⽬录下的node_modules下
为什么要保存⾄PACKAGE.JSON?
因为node插件包⾮常⼤,版本庞杂,所以不加⼊package信息,模块间的依赖变得⾮常困难,将配置信息写⼊package.json并将其加⼊版本管理,其他开发者对应下载即可(命令提⽰符执⾏npm install,则会根据package.json下载所有需要的包)。 每个项⽬的根⽬录下⾯,⼀般都有⼀个package.json⽂件,定义了这个项⽬所需要的各种模块,以及项⽬的配置信息(⽐如名称、版本、许可证等元数据)。npm install 命令根据这个配置⽂件,⾃动下载所需的模块,也就是配置项⽬所需的运⾏和开发环境。
PACKAGE.JSON 属性说明:
name - 包名。(不要把node或者js放在名字中)
version - 包的版本号。
dependencies - 项⽬运⾏所依赖的模块
devDependencies - 项⽬开发所需要的模块
bin - 这需要在你的package.json中提供⼀个bin字段,它是⼀个命令名和本地⽂件名的映射。在安装时,如果是全局安装,npm将会使⽤符号链接把这些⽂件链接到prefix/bin,如果是本地安装,会链接到./node_modules/.bin/
npm常⽤命名
使⽤npm卸载插件:npm uninstall < name > [-g] [--save-dev] PS:不要直接删除本地插件包
使⽤npm更新插件:npm update < name > [-g] [--save-dev]
更新全部插件:npm update [--save-dev]
查看npm帮助:npm help
查看当前⽬录已安装插件:npm list
还有⼀些npm的简单命令就不多说了
CN PM介绍:
注意:安装完后最好查看其版本号cnpm -v或关闭命令提⽰符重新打开,安装完直接使⽤有可能会出现错误
PS:cnpm跟npm⽤法完全⼀致,只是在执⾏命令时将npm改为cnpm。
3.常见问题
bower 和 npm有什么区别
4.解决⽅案
npm 是伴随 Node.js 出现的⼀个包管理器,最开始只能⽀持 Node.js 的模块管理,但是后来, npm 官⽹经过⼀次改版,打出的⼝号
是,javascript 的包管理器,所以,其已经不在局限于是 Node.js 的模块管理了,已经通⽤到了所有 js 的包管理⼯具了,可以说,前后通吃了。
bower 的话,从⼀开始,就是专门为前端表现设计的包管理器,⼀切全部为前端考虑的。npm 和 bow
er 的最⼤区别,就是 npm ⽀持嵌套地依赖管理,⽽ bower只能⽀持扁平的依赖(嵌套的依赖,由 程序员⾃⼰解决)。
嵌套依赖,指的就是,你依赖的软件包,还有它⾃⼰的依赖,好像摘葡萄,⼀摘⼀⼤串。在服务器环境的时候,这并没什么关系,因为存储空间够⼤,⼀切代码都是本地运⾏,只要解决完依赖就⾏了, 但是到了⽤户产品的浏览器⾥,就很成问题了,你不能让⽤户去下载好⼏M的js代码,那就太糟糕了。在这个情况下,就需要程序员⾃⼰⼿动解决⽤到的类库的嵌套依赖问题。⽐如确保各种各样的插件 都依赖同⼀个版本的jQuery。
扩展思考
cnpm有哪些问题?
1pm 的仓库只是 npm 仓库的⼀个拷贝,它不承担 publish ⼯作,所以你⽤ cnpm publish 命令会执⾏失败的
2.不仅是 publish 会执⾏失败,其它的需要注册⽤户(npm adduser)、或者修改 package 状态等命令都⽆法⽤ cnpm
7.参考⽂献
npm 模块安装机制简介
开发者对 npm 公司不满,unpublish 了⾃⼰的所有模块
npm的⼀些常⽤命令
bower 和 npm 的区别详细介绍
更多提问
Q:全局安装和本地安装的区别?
因为全局模式安装,包可以供所有的程序使⽤。本地安装则不可以。 npm 默认会把包安装到当前⽬录下。这反映了 npm 不同的设计哲学。如 果把包安装到全局,可以提⾼程序的重复利⽤程度,避免同样的内容的多 份副本,但坏处是难以处理不同的版本依赖。如果把包安装到当前⽬录, 或者说本地,则不会有不同程序依赖不同版本的包的冲突问题,同时还减 轻了包作者的 API 兼容性压⼒,但缺陷则是同⼀个包可能会被安装许多次。
Q:为什么进⾏了全局安装还要进⾏本地安装
1、在js实例代码中,默认下node.js会在NODE_PATH和⽬前js所在项⽬下的node_modules⽂件夹下去寻模块,因此,如果只是全局安装,不能直接通过require()的⽅式去引⽤模块,需要⼿动解决包路径的配置问题,当然你也可以复制全局安装的node_modules⽂件夹到项⽬下,还有办法可以选择将环境变量的NODE_PATH设置为C:\Program Files\nodejs。
2.对于包的更新不好管理,可能你需要为每个包重新命名,如gulp@
3.8.1、gulp@3.,为了区别不同项⽬使⽤指定的包,保证模块之间的相互依赖,区别每个项⽬正常运⾏
Q:如何在package.JSON的dependencies和devDependencies写⼊信息
A:npm install --save babel-cli和npm install -dev babel-cli使⽤这两个命令安装后可⾃动写⼊⽂件
npm install --save-dev babel-cli也可以在⼀起⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论