设为首页 收藏本站
查看: 862|回复: 0

[经验分享] NPM小结

[复制链接]

尚未签到

发表于 2017-2-24 08:19:38 | 显示全部楼层 |阅读模式
  nodejs的出现,可以算是前端里程碑式的一个事件,它让前端攻城狮们摆脱了浏览器的束缚,踏上了一个更加宽广的舞台。前端的可能性,从此更加具有想象空间。
  随着一系列基于nodes的应用/工具的出现,工作中与nodejs打交道的机会越来越多。无论在node应用的开发,还是使用中,包管理都扮演着一个很重要的作用。NPM(node package manager),作为node的包管理工具,极大地便利了我们的开发工作,很有必要了解一下。



NPM是什么
  NPM(node package manager),通常称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。
  npm的背后,是基于couchdb的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。
  npm官网:https://npmjs.org/
  npm官方文档:https://npmjs.org/doc/README.html



我们需要了解什么


  • npm的安装、卸载、升级、配置
  • npm的使用:package的安装、卸载、升级、查看、搜索、发布
  • npm包的安装模式:本地 vs 全局
  • package.json:包描述信息
  • package版本:常见版本声明形式



npm包安装模式
  在具体介绍npm包的管理之前,我们首先得来了解一下npm包的两种安装模式。

本地安装 vs 全局安装(重要)
  node包的安装分两种:本地安装、全局安装。两者的区别如下,后面会通过简单例子说明


  • 本地安装:package会被下载到当前所在目录,也只能在当前目录下使用。
  • 全局安装:package会被下载到到特定的系统目录下,安装的package能够在所有目录下使用。

npm install pkg - 本地安装
  运行如下命令,就会在当前目录下安装grunt-cli(grunt命令行工具)



npm install grunt-cli
  安装结束后,当前目录下回多出一个node_modules目录,grunt-cli就安装在里面。同时注意控制台输出的信息:



grunt-cli@0.1.9 node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.4)
└── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
  简单说明一下:


  • grunt-cli@0.1.9:当前安装的package为grunt-cli,版本为0.19
  • node_modules/grunt-cli:安装目录
  • resolve@0.3.1:依赖的包有resolve、nopt、findup-sync,它们各自的版本、依赖在后面的括号里列出来

npm install -g pkg- 全局安装
  上面已经安装了grunt-cli,然后你跑到其他目录下面运行如下命令



grunt
  果断提示你grunt命令不存在,为什么呢?因为上面只是进行了本地安装,grunt命令只能在对应安装目录下使用。



-bash: grunt: command not found
  如果为了使用grunt命令,每到一个目录下都得重新安装一次,那不抓狂才怪。肿么办呢?
  很简单,采用全局安装就行了,很简单,加上参数-g就可以了



npm install -g grunt-cli
  于是,在所有目录下都可以无压力使用grunt命令了。这个时候,你会注意到控制台输入的信息有点不同。主要的区别在于安装目录,现在变成了/usr/local/lib/node_modules/grunt-cli,/usr/local/lib/node_modules/也就是之前所说的全局安装目录啦。



grunt-cli@0.1.9 /usr/local/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.4)
└── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)


npm包管理
  npm的包管理命令是使用频率最高的,所以也是我们需要牢牢记住并熟练使用的。其实无非也就是几个动作:安装、卸载、更新、查看、搜索、发布等。

安装最新版本的grunt-cli



npm install grunt-cli
安装0.1.9版本的grunt-cli



npm install grunt-cli@"0.1.9"
通过package.json进行安装
  如果我们的项目依赖了很多package,一个一个地安装那将是个体力活。我们可以将项目依赖的包都在package.json这个文件里声明,然后一行命令搞定



npm install
其他package安装命令
  运行如下命令,列出所有npm install可能的参数形式



npm install --help
  输出如下,有兴趣的童鞋可以了解下



npm install <tarball file>
npm install <tarball url>
npm install <folder>
npm install <pkg>
npm install <pkg>@<tag>
npm install <pkg>@<version>
npm install <pkg>@<version range>
卸载grunt-cli
  比如卸载grunt-cli



npm uninstall grunt-cli
卸载0.1.9版本的grunt-cli



npm uninstall grunt-cli@"0.1.9"
npm ls:查看安装了哪些包
  运行如下命令,就可以查看当前目录安装了哪些package



npm ls
  输出如下



/private/tmp/npm
└─┬ grunt-cli@0.1.9
  ├─┬ findup-sync@0.1.2
  │ ├─┬ glob@3.1.21
  │ │ ├── graceful-fs@1.2.3
  │ │ ├── inherits@1.0.0
  │ │ └─┬ minimatch@0.2.12
  │ │   ├── lru-cache@2.3.0
  │ │   └── sigmund@1.0.0
  │ └── lodash@1.0.1
  ├─┬ nopt@1.0.10
  │ └── abbrev@1.0.4
  └── resolve@0.3.1
  输出如下,同样,如果是要查看package的全局安装信息,加上-g就可以

npm ls pkg:查看特定package的信息
  运行如下命令,输出grunt-cli的信息



npm ls grunt-cli
  输出的信息比较有限,只有安装目录、版本,如下:



/private/tmp/npm
└── grunt-cli@0.1.9
  如果要查看更详细信息,可以通过npm info pkg,输出的信息非常详尽,包括作者、版本、依赖等。



npm info grunt-cli
npm update pkg:package更新



npm update grunt-cli
npm search pgk:搜索
  输入如下命令



npm search grunt-cli
  返回结果如下



npm http GET http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838
npm http 200 http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838
NAME                  DESCRIPTION                                        AUTHOR            DATE              KEYWORDS
grunt-cli             The grunt command line interface.                  =cowboy =tkellen  2013-07-27 02:24
grunt-cli-dev-exitprocess The grunt command line interface.              =dnevnik          2013-03-11 16:19
grunt-client-compiler Grunt wrapper for client-compiler.                 =rubenv           2013-03-26 09:15  gruntplugin
grunt-clientside      Generate clientside js code from CommonJS modules  =jga              2012-11-07 01:20  gruntplugin
npm发布
  这个命令我自己也还没实际用过,不误导大家,语法如下,也可参考官方对于package发布的说明https://npmjs.org/doc/developers.html:



npm publish <tarball>
npm publish <folder>


NPM配置
  npm的配置工作主要是通过npm config命令,主要包含增、删、改、查几个步骤,下面就以最为常用的proxy配置为例。

设置proxy
  内网使用npm很头痛的一个问题就是代理,假设我们的代理是 http://proxy.example.com:8080,那么命令如下:



npm config set proxy http://proxy.example.com:8080
  由于npm config set命令比较常用,于是可以如下简写



npm set proxy http://proxy.example.com:8080   
查看proxy
  设置完,我们查看下当前代理设置



npm config get proxy
  输出如下:



http://proxy.example.com:8080/
  同样可如下简写:



npm get proxy
删除proxy
  代理不需要用到了,那删了吧



npm delete proxy
查看所有配置



npm config list
直接修改配置文件
  有时候觉得一条配置一条配置地修改有些麻烦,就直接进配置文件修改了



npm config edit


关于package.json
  这货在官网似乎没有详细的描述,其实就是包的描述信息啦。假设当我们下载了node应用,这个node应用依赖于A、B、C三个包,如果没有package.json,我们需要人肉安装这个三个包(如果对版本有特定要求就更悲剧了):



npm install A
npm install B
npm install C
  有了package.json,一行命令安装所有依赖。



npm install
package.json字段简介
  字段相当多,但最重要的的是下面几个


  • name: package的名字(由于他会成为url的一部分,所以 non-url-safe 的字母不会通过,也不允许出现"."、"_"),最好先在http://registry.npmjs.org/上搜下你取的名字是否已经存在
  • version: package的版本,当package发生变化时,version也应该跟着一起变化,同时,你声明的版本需要通过semver的校验(semver可自行谷歌)
  • dependencies: package的应用依赖模块,即别人要使用这个package,至少需要安装哪些东东。应用依赖模块会安装到当前模块的node_modules目录下。
  • devDependencies:package的开发依赖模块,即别人要在这个package上进行开发
  • 其他:参见官网



package版本
  在package.json里,你经常会在包名后看到类似"~0.1.0"这样的字符串,这就是包的版本啦。下面会列举最常见的版本声明形式,以及版本书写的要求:

常见版本声明形式
  a、"~1.2.3" 是神马意思呢,看下面领悟



"~1.2.3" = ">=1.2.3 <1.3.0"
"~1.2" = ">=1.2.0 <1.3.0"
"~1" = ">=1.0.0 <1.1.0"
  b、"1.x.x"是什么意思呢,继续自行领悟



"1.2.x" = ">=1.2.0 <1.3.0"
"1.x.x" = ">=1.0.0 <2.0.0"
"1.2" = "1.2.x"
"1.x" = "1.x.x"
"1" = "1.x.x"
版本书写要求


  • 版本可以v开头,比如 v1.0.1(v只是可选)
  • 1.0.1-7,这里的7是所谓的“构建版本号”,不理是神马,反正版本大于1.0.1
  • 1.0.1beta,或者1.0.1-beta,如果1.0.1后面不是 “连字符加数字” 这种形式,那么它是pre release 版本,即版本小于 1.0.1
  • 根据b、c,有:0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta



写在后面
  内容只是简单地把最常见的命令,以及一些需要了解的内容列了出来。如要进一步了解,可参考官网说明。此外,npm help是我们最好的朋友,如果忘了有哪些命令,命令下有哪些参数,可通过help进行查看。
  最关键的:如果文章内容有误,请指出!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346362-1-1.html 上篇帖子: WiFi流量劫持—— 浏览任意页面即可中毒! 下篇帖子: 【javascript 进阶】异步调用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表