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:\NodeJS\myPackage>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:\NodeJS\myPackage\package.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:\NodeJS\myPackage>
3.2得到一个npm帐号
在发布之前,我们需要一个帐号用于今后维护自己的包,使用npm adduser根据提示输入用户名,密码,邮箱,等待帐号创建完成。
完成后可以使用npm whoami测验是否已经取得了帐号.
E:\NodeJS\myPackage>npm adduser
Username: YangZhiRan
npm WARN Username must be lowercase
Username: yangzhiran
Password:
Email: (this IS public) 2437676796@qq.com
E:\NodeJS\myPackage>npm whoami
yangzhiran
3.3发布
在package.json文件所在目录下运行npm publish
===>访问https://www.npmjs.com/就可以找到自己发布的包了
E:\NodeJS\myPackage>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调试