Node.js学习-NPM

作者: _palm | 来源:发表于2016-10-23 15:01 被阅读814次

    npmjs.com说:npm能让javascript开发人员发布代码和复用代码变得更容易.并别能非常容易的让别人将你发布的代码同步到最新版本。

    npm是一个包管理工具,就像arch下的pacman 、 debian系下的apt-get 、以及基于RPM包的yum 如CentOS、RedHat,它能帮我们自动处理软件包的以来关系,以及软件包的安装和卸载提供更简便的操作,让使用者最少的关心与软件使用无关的东西。最开始npm只是用来管理node项目代码的,现在已经可以管理很多其他语言代码了。

    npm 安装

    学习环境:

    Linux arch 4.8.2-1-ARCH #1

    运行:

    curl -L https://npmjs.org/install.sh | sh

    通常运行上面命令都会失败,如果你没有变更过linux下权限配置,都会因为权限不能执行sh命令
    所以, curl下载并执行安装命令可能需要变更为:

    curl -L https://npmjs.org/install.sh | sudo sh

    不出意外就可以顺利安装了,可能需要耐心等待一会儿,因为npm默认使用了国外镜像,数据包路由可能需要更多时间。

    安装结束后,可以使用如下命令校验是否安装成功:

    [palm@arch]: ~/Desktop/node-stu/stunode>$ npm
    
    Usage: npm <command>
    
    where <command> is one of:
        access, adduser, bin, bugs, c, cache, completion, config,
        ddp, dedupe, deprecate, dist-tag, docs, edit, explore, get,
        help, help-search, i, init, install, install-test, it, link,
        list, ln, login, logout, ls, outdated, owner, pack, ping,
        prefix, prune, publish, rb, rebuild, repo, restart, root,
        run, run-script, s, se, search, set, shrinkwrap, star,
        stars, start, stop, t, tag, team, test, tst, un, uninstall,
        unpublish, unstar, up, update, v, version, view, whoami
    
    npm <cmd> -h     quick help on <cmd>
    npm -l           display full usage info
    npm help <term>  search for help on <term>
    npm help npm     involved overview
    
    Specify configs in the ini-formatted file:
        /home/palm/.npmrc
    or on the command line via: npm <command> --key value
    Config info can be viewed via: npm help config
    
    npm@3.10.9 /usr/lib/node_modules/npm
    

    上面输出信息表示已经成功安装了npm,已经可以使用了。npm一些简单的使用如下:

    • npm -v 查看当前npm版本
    [palm@arch]: ~/Desktop/node-stu/stunode>$ npm -v
    3.10.9
    
    • npm --help / npm man npm帮助,如果你忽然忘记了npm某一个命令使用可以通过这两个命令查找对应命令描述,如:
    [palm@arch]: ~/Desktop/node-stu/stunode>$ npm --help install
    
    npm install (with no args, in package dir)
    npm install [<@scope>/]<pkg>
    npm install [<@scope>/]<pkg>@<tag>
    npm install [<@scope>/]<pkg>@<version>
    npm install [<@scope>/]<pkg>@<version range>
    npm install <folder>
    npm install <tarball file>
    npm install <tarball url>
    npm install <git:// url>
    npm install <github username>/<github project>
    
    aliases: i, isntall
    common options: [--save|--save-dev|--save-optional] [--save-exact]
    
    • npm install

    npm install <package_name>

    使用这个命令,npm会帮助我们下载 #package_name默认到当前的node_modules 目录下,如果没有这个目录,npm会自动创建。这种安装方式是本地安装,换一种说法,被安装的软件包(#package_name) 只是在当前所在project下生效。如果需要全局使用可以增加参数 -g ,如此,就是当前系统用户下可用。更多信息可以使用以下命令查看:

    npm help npm-folders

    因为默认npm使用了国外的源,所以,可以使用追加 --registry=https: //xxx.xxx.xxx 从指定源下载该软件包.

    • npm init 该命令会在当前目录下自动创建一个 package.json文件,并且会提示输入一系列信息,比如包名,初始版本(默认为1.0.0), 软件包描述,入口文件(或main文件,默认叫index.js), 软件测试命令,git仓库地址以及开发者名字等等. 完毕确认后内容类似如下这样:
    {
      "name": "test",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "directories": {
        "test": "test"
      },
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    

    package.json 文件内容必须是严格的json格式,不能是javascript对象,像这样:

    {
      name: "test",
      version: "1.0.0",
      description: "",
      main: "index.js",
      directories: {
        test: "test"
      },
      scripts: {
        test: "echo \"Error: no test specified\" && exit 1"
      },
      author: "",
      license: "MIT"
    }
    

    这样的格式是错误的。key-value中,value更不能是对象类型字面量值。 只能是字符串。

    package.json 文件
    package.json 能更好的帮助npm或者其他包管理工具管理软件包,通过这个文件,npm可以自动下载安装包所需要的依赖包,以及run入口函数,让软件仓库如github等更方便的、更通用的测试软件包是否可用,同时package.json 也提供一个通用的软件包信息读取接口。基于这个文件,我们可以很容易的读取到该软件包详细信息。

    package.json更多的字段描述在这里,根据习惯,如果我们提供了 README.md或者'README'文件,也可以忽description字段,这个字段是为了帮助别人在npm搜索。所以这个字段的信息,要尽可能的对软件有用,从而使你的软件包让更多的人发现。

    总之,package.json已经是npm包定义的一个不可缺少的一部分。

    • npm install <package_name> --save
      --save参数是为了自动的修改package.json dependencies 字段,会自动将安装的软件包作为本软件包的依赖添加到package.json文件中。这样我们就不用去手动修改 package.json文件了,如果手动维护,忘记添加后,使用我们发布的包会出现缺少依赖错误。 栗子:
    npm install express --save
    

    可能需要等待一段时间,安装完毕会将这个目录树打印到命令行窗口上,就像这样:

    test@1.0.0 /home/palm/Desktop/node-stu/test
    └─┬ express@4.14.0 
      ├─┬ accepts@1.3.3 
      │ ├─┬ mime-types@2.1.12 
      │ │ └── mime-db@1.24.0 
      │ └── negotiator@0.6.1 
      ├── array-flatten@1.1.1 
      ├── content-disposition@0.5.1 
      ├── content-type@1.0.2 
      ├── cookie@0.3.1 
      ├── cookie-signature@1.0.6 
      ├─┬ debug@2.2.0 
      │ └── ms@0.7.1 
      ├── depd@1.1.0 
      ├── encodeurl@1.0.1 
      ├── escape-html@1.0.3 
      ├── etag@1.7.0 
      ├─┬ finalhandler@0.5.0 
      │ ├── statuses@1.3.0 
      │ └── unpipe@1.0.0 
      ├── fresh@0.3.0 
      ├── merge-descriptors@1.0.1 
      ├── methods@1.1.2 
      ├─┬ on-finished@2.3.0 
      │ └── ee-first@1.1.1 
      ├── parseurl@1.3.1 
      ├── path-to-regexp@0.1.7 
      ├─┬ proxy-addr@1.1.2 
      │ ├── forwarded@0.1.0 
      │ └── ipaddr.js@1.1.1 
      ├── qs@6.2.0 
      ├── range-parser@1.2.0 
      ├─┬ send@0.14.1 
      │ ├── destroy@1.0.4 
      │ ├─┬ http-errors@1.5.0 
      │ │ ├── inherits@2.0.1 
      │ │ └── setprototypeof@1.0.1 
      │ └── mime@1.3.4 
      ├── serve-static@1.11.1 
      ├─┬ type-is@1.6.13 
      │ └── media-typer@0.3.0 
      ├── utils-merge@1.0.0 
      └── vary@1.1.0 
    

    查看项目根目录下文件,多了一个 node_modules(如果你没有新建该目录的话):
    查看目录node_modules ,express 软件包的依赖都自动下载到该目录下了,linux下可以使用命令

    ls node_modules/

    查看依赖包是否有遗漏。查看package.json文件,发现有新增节点dependencies,如:

    {
      "name": "test",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^4.14.0"
      }
    }
    

    更多npm使用在这里, 比如: 包本地/全局卸载、包依赖更新等等

    npm也提到了自己提倡的coding-style,比如,经常看见的比较混乱的{前是否需要换行,在c语言中,一般都是这样:

    int fun(int x, int y) 
    {
      return x + y ;
    }
    

    而在javajavascript中是这样的:

    public int add(int x, int y) {
      return x + y ;
    }
    
    function fun(x,y) {
      return x + y ;
    }
    

    npm 提倡使用上面javascript代码风格, 如:

    //bad
    function()
    {
      //
    }
    
    //good
    function() {
      //
    }
    

    个人也非常推荐npm的 coding-style,甚至非常排斥c语言代码风格在javascript上使用,不仅仅是因为大部分javascript解释引擎自动在语句末尾添加分号。


    ----- npm学习结束

    相关文章

      网友评论

        本文标题:Node.js学习-NPM

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