NodeJs之npm

today, 我们的话题作文是nodejs,我尝试对它的描述是:似曾相似,但它又不一样的存在着。百花齐放的it世界里,以独特身姿绽放的美丽更容易吸引人。也许只是不了解,也许时间会给出答案,nodejs你值得拥有。

在2篇中我们接触了一点点关于nodejs包(package)的话题,那么乘热打铁,本篇聊一下包管理工具npm。

1.npm 包管理工具

Node.js包管理器,即npm是Node.js官方提供的包管理器工具,他已经成了Node.js包的标准发布平台,用于Node.js包的发布,传播,依赖控制.npm提供了命令行工具,使你可以方便的下载,安装,,升级,删除包,也可以让你作为开发者发布并维护包.

这个东西会跟随着NodeJs的安装而自动安装,通过在命令行中输入npm -v查看npm安装的版本,这样间接可以知道是否已经成功安装了npm。

E:NodeJS>npm -v
2.14.12

下面简单看一下npm的作用:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

2.使用npm下载安装包

npm install packageName  或者npm i packageName

安装成功的包,会放置在当前目录的node_modules子目录下,npm在获取包的同时还会自动解析其依赖,并会去下载其依赖的包。

2.1本地模式和全局模式

在使用npm安装包时, 有两种模式,一种本地模式(不带参数-g),一种全局模式。
本地安装    不加-g
1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
2. 可以通过 require() 来引入本地安装的包。

默认情况下,不带参数-g的install命令采用的就是本地模式,包将会安装在子目录node_modules下。Node.js的require在加载模块时会尝试搜寻该目录,因此使用本地模式安装的包可以被直接引用。


全局安装    加-g
1. 将安装包放在 /usr/local 下。
2. 可以直接在命令行里使用。
3. 不能通过 require() 来引入本地安装的包

加了-g安装,npm 会将包安装到系统目录,譬如 /usr/local/lib/node_modules/,同时 package.json 文 件中 bin 字段包含的文件会被链接到 /usr/local/bin/。/usr/local/bin/ 是在PATH 环境变量中默认 定义的,因此就可以像之前supervisor工具那样子直接在命令行中运行 supervisor script.js命令了。


为什么要使用全局模式呢?多数时候并不是因为许多程序都有可能用到它,为了减少多重副本而使用全局模式,而是因为本地模式不会注册 PATH 环境变量。
             required  注册path
本地模式    YES        NO
全局模式    NO         YES
总而言之,当我们要把某个包作为工程运行时的一部分,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装.

3.使用npm发布包
3.1制作一个符合CommonJS规范的package.json文件
通过使用npm init可以根据交互式问答产生一个符合标准的package.json
   ==>>>   比如创建一个myPackage的目录,然后在这个目录中运行npm init

E:NodeJSmyPackage>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (myPackage) YZR
Sorry, name can no longer contain capital letters.
name: (myPackage) yzr
version: (1.0.0) 0.0.1
description: test
entry point: (index.js) default.js
test command: make test
git repository: http://github/YangZhiRan/mypackage.git
keywords: nodejs yzr
author: YZR
license: (ISC) MIT
About to write to E:NodeJSmyPackagepackage.json:

{
  "name": "yzr",
  "version": "0.0.1",
  "description": "test",
  "main": "default.js",
  "directories": {
    "doc": "doc",
    "test": "test"
  },
  "scripts": {
    "test": "make test"
  },
  "repository": {
    "type": "git",
    "url": "http://github/YangZhiRan/mypackage.git"
  },
  "keywords": [
    "nodejs",
    "yzr"
  ],
  "author": "YZR",
  "license": "MIT"
}


Is this ok? (yes) yes

E:NodeJSmyPackage>


3.2得到一个npm帐号
在发布之前,我们需要一个帐号用于今后维护自己的包,使用npm adduser根据提示输入用户名,密码,邮箱,等待帐号创建完成。
完成后可以使用npm whoami测验是否已经取得了帐号.

E:NodeJSmyPackage>npm adduser
Username: YangZhiRan
npm WARN Username must be lowercase
Username: yangzhiran
Password:
Email: (this IS public) 2437676796@qq.com


E:NodeJSmyPackage>npm whoami
yangzhiran


3.3发布
在package.json文件所在目录下运行npm publish
  ===>访问https://www.npmjs.com/就可以找到自己发布的包了


E:NodeJSmyPackage>npm publish
+ yzr@0.0.1


3.4更新版本
只需要在package.json文件中修改version字段,然后重新使用npm publish 命令。
3.5卸载包
使用npm unpublish命令来取消发布.

下面涉及npm代理的设置,有需要可以看一下:

设置http代理:npm config Set proxy http:ip地址:端口

取消代理设置:npm config delete proxy

Next:NodeJS调试

原文地址:https://www.cnblogs.com/Francis-YZR/p/5261173.html