zoukankan      html  css  js  c++  java
  • NPM是什么

    nodejs的出现,可以算是前端里程碑式的一个事件,它让前端攻城狮们摆脱了浏览器的束缚。

     

    随着一系列基于nodes的应用/工具的出现,工作中与nodejs打交道的机会越来越多。无论在node应用的开发,还是使用中,包管理都扮演着一个很重要的作用。NPM(node package manager),作为node的包管理工具,极大地便利了我们的开发工作,很有必要了解一下。

    NPM是什么

    NPM(node package manager),通常称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。

    npm的背后,是基于couchdb的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。

     

    我们需要了解什么

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

    npm包安装模式

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

    本地安装 vs 全局安装(重要)

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

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

    npm install pkg - 本地安装

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

    1. npm install grunt-cli
     
     

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

    1. grunt-cli@0.1.9 node_modules/grunt-cli
    2. ├── resolve@0.3.1
    3. ├── nopt@1.0.10(abbrev@1.0.4)
    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,然后你跑到其他目录下面运行如下命令

    1. grunt
    魔芋:测试结果:
     

     

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

    1. -bash: grunt: command not found
     

    如果为了使用grunt命令,每到一个目录下都得重新安装一次,那不抓狂才怪。肿么办呢?

    很简单,采用全局安装就行了,很简单,加上参数 -g 就可以了

    1. npm install -g grunt-cli
     
    结果:魔芋

     

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

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

    npm包管理

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

    安装最新版本的grunt-cli

    1. npm install grunt-cli
     

    安装0.1.9版本的grunt-cli

    1. npm install grunt-cli@"0.1.9"
     

    通过package.json进行安装

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

    1. npm install
     

    其他package安装命令

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

    1. npm install --help
     

    输出如下,有兴趣的童鞋可以了解下

    1. npm install <tarball file>
    2. npm install <tarball url>
    3. npm install <folder>
    4. npm install <pkg>
    5. npm install <pkg>@<tag>
    6. npm install <pkg>@<version>
    7. npm install <pkg>@<version range>
     

    卸载grunt-cli

    比如卸载grunt-cli

    1. npm uninstall grunt-cli
     

    魔芋结果:


     

    卸载0.1.9版本的grunt-cli

    1. npm uninstall grunt-cli@"0.1.9"
     

    npm ls:查看安装了哪些包

    运行如下命令,就可以查看当前目录安装了哪些package

    1. npm ls
     

    输出如下

    1. /private/tmp/npm
    2. └─┬ grunt-cli@0.1.9
    3.   ├─┬ findup-sync@0.1.2
    4.   ├─┬ glob@3.1.21
    5.   ├── graceful-fs@1.2.3
    6.   ├── inherits@1.0.0
    7.   └─┬ minimatch@0.2.12
    8.      ├── lru-cache@2.3.0
    9.      └── sigmund@1.0.0
    10.   └── lodash@1.0.1
    11.   ├─┬ nopt@1.0.10
    12.   └── abbrev@1.0.4
    13.   └── resolve@0.3.1
     

    输出如下,同样,如果是要查看package的全局安装信息,加上 -g 就可以

    npm ls pkg:查看特定package的信息

    运行如下命令,输出grunt-cli的信息

    1. npm ls grunt-cli
     

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

    1. /private/tmp/npm
    2. └── grunt-cli@0.1.9
    魔芋测试:

     

    如果要查看更详细信息,可以通过 npm info pkg ,输出的信息非常详尽,包括作者、版本、依赖等。

    1. npm info grunt-cli
     

    npm update pkg:package更新

    1. npm update grunt-cli
     

    npm search pgk:搜索

    输入如下命令

    1. npm search grunt-cli
     

    返回结果如下

    1. npm http GET http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838
    2. npm http 200 http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838
    3. NAME                  DESCRIPTION                                        AUTHOR            DATE              KEYWORDS
    4. grunt-cli             The grunt command line interface.                  =cowboy =tkellen  2013-07-2702:24
    5. grunt-cli-dev-exitprocess The grunt command line interface.              =dnevnik          2013-03-1116:19
    6. grunt-client-compiler Grunt wrapper for client-compiler.                 =rubenv           2013-03-2609:15  gruntplugin
    7. grunt-clientside      Generate clientside js code from CommonJS modules  =jga              2012-11-0701:20  gruntplugin
     

    npm发布

    这个命令我自己也还没实际用过,不误导大家,语法如下,也可参考官方对于package发布的说明 https://npmjs.org/doc/developers.html 

    1. npm publish <tarball>
    2. npm publish <folder>
     

    NPM配置

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

    设置proxy

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

    1. npm config set proxy http://proxy.example.com:8080
     

    由于 npm config set 命令比较常用,于是可以如下简写

    1. npm set proxy http://proxy.example.com:8080   
     

    查看proxy

    设置完,我们查看下当前代理设置

    npm config get proxy

    输出如下:

    同样可如下简写:

    npm get proxy

    删除proxy

    代理不需要用到了,那删了吧

    1. npm delete proxy
     

    查看所有配置

    npm config list

    魔芋测试:


    直接修改配置文件

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

    1. npm config edit
     

    关于package.json

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

    1. npm install A
    2. npm install B
    3. npm install C
     

    有了package.json,一行命令安装所有依赖。

    1. 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. "~1.2.3"=">=1.2.3 <1.3.0"
    2. "~1.2"=">=1.2.0 <1.3.0"
    3. "~1"=">=1.0.0 <1.1.0"
     

    b、"1.x.x"是什么意思呢,继续自行领悟

    1. "1.2.x"=">=1.2.0 <1.3.0"
    2. "1.x.x"=">=1.0.0 <2.0.0"
    3. "1.2"="1.2.x"
    4. "1.x"="1.x.x"
    5. "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进行查看。

    最关键的:如果文章内容有误,请指出!!!

    参考:

    程序猿小卡





  • 相关阅读:
    atitit.ntfs ext 文件系统新特性对比
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx
  • 原文地址:https://www.cnblogs.com/moyuling/p/5262633.html
Copyright © 2011-2022 走看看