欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Node.js学习-NPM

程序员文章站 2022-05-29 12:16:57
...

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默认使用了国外镜像,数据包路由可能需要更多时间。

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

[[email protected]]: ~/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

[email protected] /usr/lib/node_modules/npm

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

  • npm -v 查看当前npm版本
[[email protected]]: ~/Desktop/node-stu/stunode>$ npm -v
3.10.9
  • npm --help / npm man npm帮助,如果你忽然忘记了npm某一个命令使用可以通过这两个命令查找对应命令描述,如:
[[email protected]]: ~/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

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

[email protected] /home/palm/Desktop/node-stu/test
└─┬ [email protected] 
  ├─┬ [email protected] 
  │ ├─┬ [email protected] 
  │ │ └── [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ ├── [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ ├── [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ ├── [email protected] 
  │ ├─┬ [email protected] 
  │ │ ├── [email protected] 
  │ │ └── [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  ├─┬ [email protected] 
  │ └── [email protected] 
  ├── [email protected] 
  └── [email protected] 

查看项目根目录下文件,多了一个 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学习结束