Node.js学习-NPM

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学习结束

    原文作者:_palm
    原文地址: https://www.jianshu.com/p/dc1d19fe9774
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞