NPM小结 - 程序猿小卡 - 博客园
    Tuesday, October 10, 2017
    1:08 PM
    NPM小结
    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
    我们需要了解什么

    1. npm的安装、卸载、升级、配置
    2. npm的使用:package的安装、卸载、升级、查看、搜索、发布
    3. npm包的安装模式:本地 vs 全局
    4. package.json:包描述信息
    5. 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 npm install npm install npm install npm install @ npm install @ npm install @
    卸载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 npm publish
    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字段简介
    字段相当多,但最重要的的是下面几个

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

    1. 版本可以v开头,比如 v1.0.1(v只是可选)
    1. 1.0.1-7,这里的7是所谓的“构建版本号”,不理是神马,反正版本大于1.0.1
    1. 1.0.1beta,或者1.0.1-beta,如果1.0.1后面不是 “连字符加数字” 这种形式,那么它是pre release 版本,即版本小于 1.0.1
    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进行查看。
    最关键的:如果文章内容有误,请指出!!!
    github博客:https://github.com/chyingp/blog
    新浪微博:http://weibo.com/chyingp
    站酷主页:http://www.zcool.com.cn/u/346408/
    标签: npm
    好文要顶 关注我 收藏该文
    NPM小结 - 程序猿小卡 - 博客园 - 图1
    计算机生成了可选文字:
    计算机生成了可选文字:
    程序猿小卡 关注 - 19 粉丝 - 604
    +加关注
    27
    0
    « 上一篇:jQuery源码-dom操作之jQuery.fn.html » 下一篇:如何在内网安装compass
    posted @ 2013-08-12 09:28 程序猿小卡 阅读(46303) 评论(7) 编辑 收藏
    评论列表
    #1楼 2014-05-10 10:45 悟道前端
    不错,博文样式很nice
    支持(0)反对(0)
    #2楼 2014-08-04 15:35 rambo1
    不知道为什么 npm ls 在我这里不管用啊
    在我这里总是显示成:
    npm ls
    /User/xxx/my_pro:
    empty
    npm list
    就有内容 很迥异啊
    还有 npm ls -g 看不出全局安装了什么
    npm -g ls 就行
    我现在已经用 npm list 替代 npm ls了
    ps 顺便加一个 比较有用的
    npm cache clean 清理缓存
    支持(0)反对(0)
    #3楼 2016-02-26 16:00 魔芋铃
    mark.还是一位设计师,真是多才啊。
    by魔芋。
    支持(0)反对(0)
    #4楼[楼主] 2016-02-26 16:06 程序猿小卡
    @ 魔芋铃
    其实我是搬砖的~
    支持(0)反对(0)
    #5楼 2016-07-06 14:24 icelin
    mark
    支持(0)反对(0)
    #6楼 2016-09-08 10:24 Dont
    本地安装:package会被下载到当前所在目录,也只能在当前目录下使用。
    我发现,当当前目录的父级目录有npm install过而生成node_modules时,此时当前下载的内容会直接到上面那个node_modules去了。(不过刚试了下,在父级目录没有npm install情况下,人工生成node_modules,就不会有这情况)
    支持(0)反对(0)
    #7楼 2017-06-13 11:21 huangenai
    請問又了解關於 npm publish 怎麽發佈測試版本和正式版本呢?
    支持(0)反对(0)
    刷新评论刷新页面返回顶部
    注册用户登录后才能发表评论,请 登录 注册访问网站首页。
    【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库 【推荐】搭建微信小程序 就选腾讯云 【推荐】报表开发有捷径:快速设计轻松集成,数据可视化和交互
    华为云1009
    最新IT新闻:
    · “中国天眼”FAST首批成果有了:发现2颗新脉冲星 · ofo联合创始人薛鼎:小黄车将成为全球基础设施 · 微软Windows手机梦正式破灭 B计划是什么? · 京东推出全新奢侈品电商平台TOPLIFE · Uber启动“方舟计划”重组技术部门 终结内耗混乱 » 更多新闻…
    阿里云1001
    最新知识库文章:
    · 实用VPC虚拟私有云设计原则 · 如何阅读计算机科学类的书 · Google 及其云智慧 · 做到这一点,你也可以成为优秀的程序员 · 写给立志做码农的大学生
    » 更多知识库文章…
    已使用 Microsoft OneNote 2016 创建。