美文网首页
npm包管理器

npm包管理器

作者: LuciferTM | 来源:发表于2016-06-27 15:49 被阅读889次

    准备和使用Node包管理器

    如果没有引入其他的包,你只能使用Node本身的语言特性和核心函数,这就是为什么大多数程序平台都有一个用来下载、安装,管理第三方模块的系统,在Node里,我们使用Node包管理器(NPM: Node Package Manager)

    NPM包含三部分:

    1. 存放第三方包的代码库
    2. 管理本地已经安装包的机制
    3. 定义包依赖关系的标准。

    NPM提供了一个公共的注册服务,它包含了大家发布的所有包,并提供了一个命令行工具,用来下载,安装和管理这些包。你可以按照Node的包格式标准来制定你的包或者应用需要依赖的其他第三方包。
    虽然不用了解NPM就可以开始使用Node,但是如果要用第三方包你就必须要学习它了,因为Node本身只提供了一些低层的API,使用第三方模块可以大幅减少开发复杂度,不用什么都得亲自编码。NPM允许你在一个沙箱里下载和使用模块,你可以尽情地试验你感兴趣的东西,而不用担心污染全局的包环境。

    NPM模块的全局和本地模式

    NPM的操作主要有两种模式:全局和本地。这两种模式会影响包存放的目录结构,以及Node加载包时的顺序。
    本地模式是NPM的默认操作模式,在这个模式下,NPM只工作在工作目录下,不会造成系统范围的修改,这个模式让你在某个Node程序下尽情地安装,测试模块,而不会影响你电脑上的其他Node程序。全局模式适合那些将被很多程序使用,而且总是被全局加载的公共模块,比如命令行工具这些公不会被应用程序直接使用的模块。

    全局模式

    如果你安装Node时使用的默认目录,在全局模式下面,NPM会把包安装到/usr/local/lib/node_modules。如果你执行下面的命令,NPM会搜索并下载名为sax的最新版并安装到/usr/local/lib/node_modules/sax目录下。

    pic1.png

    如果你没有在应用程序目录下用本地模式安装过sax,Node将会在前面的安装目录里查找名为sax的模块,否则会优先加载本地版本。
    默认模式是本地模式,因此你需要在NPM命令后加上-g标记来启用全局模式。

    本地模式

    本地模式是Node包依赖机制的默认推荐模式,这个模式下,NPM安装的所有东西都在当前工作目录(根目录也不例外),而不会影响任何全局的设置。这种机制可以让你一个个的设置应用程序的依赖模块以及它们的版本,而不用担心会污染全局的模块空间。这意味着你可以有依赖同一个模块不同版本的两个应用,它们却不会产生冲突。
    在这个模式下,NPM使用当前工作目录下的node_modules目录来存放模块,比如你当前工作目录是/home/user/apps/my_app,NPM将会用/home/user/apps/my_app/node_modules来存放所有本地模块。这意味着,如果你在代码里使用模块名来引用模块,Node首先会到这个本地的node_modules目录下查找,如果没找到才会去搜索全局的node_modules目录,本地模块优先级总是高于全局模块。

    使用下面命令来安装一个模块的最新版本:

    $ npm install <package name>
    

    例如,下载和安装名一个名为sax的模块的最新版本,你首先需要把你应用程序的根目录设置为当前目录,然后输入:

    $ npm install sax
    

    这个操作,会在当前目录下建立node_modules子目录(如果不存在的话),然后在下面安装sax模块。
    你也可以通过下面的命令,来选择安装某个特定的版本:

    $ npm install <package name>@<version spec>
    

    使用指定的版本号替换命令里的占位符即可,比如,要下载sax模块的0.2.5版本,你只用运行:

    $ npm install sax@0.2.5
    

    占位符也可以用一个版本范围来替换,比如,要安装sax模块0.2分支的最新版:

    $ npm install sax@0.2.x
    

    或者,安装版本号小于0.3的最新版:复制代码代码如下:

    $ npm install sax@”<0.3”
    

    甚至可以指定一个版本范围:

    $ npm install sax@">=0.1.0 <0.3.1"
    

    卸载模块
    使用下面命令可以卸载一个本地模块:

    $ npm uninstall <package name>
    

    如果要卸载的是一个全局模块,加上-g标记即可

    $ npm uninstall -g <package name>
    

    更新模块
    使用下面命令来更新本地模块:

    $ npm update <package name>
    

    这个命令会尝试获取最新版的模块包并更新本地版本,如果本地没有安装,则会安装它,如果需要更新的是全局环境,需要加上-g标记:

    $ npm update –g <package name>
    

    使用可执行文件

    模块可以包含一个或多个可执行文件,如果你使用默认目录设置来安装一个全局模块,NPM会把可执行文件安装到/usr/local/bin目录下,这个目录通常也被设置为系统PATH环境变量的一部分。如果你局部安装这个模块,NPM会把所有可执行文件放到./node_modules/.bin目录下。
    处理依赖关系
    NPM不仅安装你需要的模块包,而且会安装这些模块所依赖的其它模块,比如,如果你需要安装模块A,而A又依赖模块B和C,那么在你安装A的时候B和C同时会被安装到./node_modules/A/node_modules目录下。
    例如,你用下面的命令本地安装了一个叫nano的模块:

    pic2.png pic3.png

    使用package.json文件定义依赖关系

    当开始编写一个应用程序时,可以在应用程序根目录创建一个package.json文件来定义应用程序的元数据,比如应用的名字,作者,代码库地址,联系方式等等。程序依赖的外部模块也在这个文件里指定。
    如果不打算把程序发布到NPM上,就可以不用建这个文件,不过即使你的程序是私有的,这个文件其实也有用,它可以告诉NPM这个应用程序的依赖关系。(译者注:比如你把项目源码从开发环境复制到生产环境,可以通过调用npm install来一次性安装所有依赖包,npm会通过package.json内指定的依赖关系来自动完成依赖模块的下载安装,不用自己一个个去操作,稍候有详细介绍)
    package.json是一个JSON格式的文件,包含了一系列属性,但是如果仅仅是为了说明程序的依赖关系,则只用一个dependencies属性就行。比如,一个叫MyApp的应用程序依赖sax,nano和request模块,只需要建立这样一个package.json:

    {
        "name" : "MyApp",
        "version" : "1.0.0",
        "dependencies" : 
        {
            "sax" : "0.3.x",
            "nano" : "*",
            "request" : ">0.2.0"
        }
    }
    

    你指定了MyApp应用,依赖0.3版本的sax,任意版本的nano,以及版本高于0.2.0的request模块。
    注意:你可能发现,如果你指定了name和version字段,NPM会不工作,这只会发生在旧版本的NPM,因为最初NPM是针对公共模块使用的,而不是私有程序。
    然后,在应用程序的根目录,执行:

     $ npm install
    

    这样,NPM就会分析依赖关系以及你本地的node_modules目录,并自动的下载和安装缺失的模块。
    你也可以通过下面的命令把所有本地模块更新到符合你定义的依赖项设置的最新版本:

    $npm update
    

    事实上,你仅用update方法就行了,因为它会让NPM自动获取那些缺失的依赖模块。

    相关文章

      网友评论

          本文标题:npm包管理器

          本文链接:https://www.haomeiwen.com/subject/byvzdttx.html