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.jsondependencies
字段,会自动将安装的软件包作为本软件包的依赖添加到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 ;
}
而在java
或 javascript
中是这样的:
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学习结束
网友评论