NPM(node package manager),通常称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。
一.npm的安装
以前的node.js需要自己下载npm,现在只要用户下载node.js,npm就会下载在本地了。
node.js下载网址
安装完成后,在终端输入:
node -v
可以查看node.js的版本号;
同样输入:
npm -v
也可以查看npm的版本号。
二. npm包管理
npm包就想手机app商店里的应用,每一个应用都有一个独一无二的名字,所以安装时只需要通过名称来下载想要的包。
node包的安装分两种:本地安装、全局安装。两者的区别如下:
- 本地安装:package会被下载到当前所在目录,也只能在当前目录下使用。(一般cd到当前工作的文件夹下安装)本地安装只需要输入:
npm install xxx
也可以快捷输入为:
npm i xxx
安装指定版本的包:
npm install xxx@x.x.x
卸载一个包:
npm uninstall xxx
本地安装的包,安装在当前项目的node_modules文件夹下。
本地安装后可以直接通过require()的方式引入项目中node_modules目录下的模块,如下示例,本地安装后直接在gulpfile.js中require('gulp')。
var gulp = require('gulp')
var sass = require('sass')
tips: 如果使用npm安装插件太慢(被墙),可执行
npm install -g cnpm --registry=[https://registry.npm.taobao.org
安装好cnpm之后,再安装插件时用cnpm安装node包:
cnpm install gulp
- 全局安装:package会被下载到Node安装目录下的node_modules文件夹中,(在windows下,一般在 \Users\用户名\AppData\Roaming\ 目录下)可以使用
npm root -g
查看全局安装目录。
全局安装的命令为:
npm install -g xxx
全局安装的package能够在所有目录下“使用”,一般命令行工具使用全局安装。
这里有一个误区,既然可以全局安装了,我们为什么还要浪费时间在本地安装呢?
- 全局安装只是意味着用户可以在全局使用该组件包支持的命令行,并不是所有的项目文件夹中可以require到想要的依赖(包),当我们在本地引用一个包时,首先在引用文件的文件夹中查找node_modules文件夹,如果没就在上一层文件夹中查找node_modules,最后直接到根目录,很明显这个过程不会查找到全局安装的目录。
- 全局安装对于包的更新不好管理,可能你需要为每个包重新命名,如gulp@3.8.1、gulp@3.9.1...,为了区别不同项目使用指定的包(我们在项目中可能经常需要使用不同版本的包),保证模块之间的相互依赖,区别每个项目正常运行,所以本地安装也是很有必要的。
三、关于npm的package.json
在我们完成一个项目时,有一些包是开发、测试、打包等工程化所需要的,有一些则是项目运行中所依赖的。当我们把包发布上线时,用户只需要下载项目运行时所需要的包就可以了。那么用户的npm如何知道哪些是必须的依赖呢。这些信息都会写在node包的package.json中。
每一个node包都会有一个package.json文件,在安装一个node包时,当我们执行
npm install --save xxx
安装的node包的名称就会写入package.json中的dependencies字段下,表示这个包是项目运行所依赖的包。
如果我们安装一个包时执行:
npm install --save-dev xxx
则会在packaeg.json中的devDependencies字段下写入node包的名字,说明这个包时开发中依赖的包。
如此一来用户在下载使用我们开发的包时,就可以只下载运行中依赖的包了。
在新建的项目文件夹中执行:
npm init
会生成一个package.json文件,会提示让你输入包的名称、版本号、作者等信息。如果觉得复杂当然可以选择直接按enter过,或者你可以选择:
npm init -y
来快速创建一个package.json文件。
下面是一个完整的package.json文件:
{
"name": "Hello World",
"version": "0.0.1",
"author": "张三",
"description": "第一个node.js程序",
"keywords":["node.js","javascript"],
"repository": {
"type": "git",
"url": "https://path/to/url"
},
"license":"MIT",
"engines": {"node": "0.10.x"},
"bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
"contributors":[{"name":"李四","email":"lisi@example.com"}],
"bin": {
"weather": "./index.js"
}
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "latest",
"mongoose": "~3.8.3",
"handlebars-runtime": "~1.0.12",
"express3-handlebars": "~0.5.0",
"MD5": "~1.2.0"
},
"devDependencies": {
"bower": "~1.2.8",
"grunt": "~0.4.1",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-jshint": "~0.7.2",
"grunt-contrib-uglify": "~0.2.7",
"grunt-contrib-clean": "~0.5.0",
"browserify": "2.36.1",
"grunt-browserify": "~1.3.0",
}
}
最后值得一提的是scripts字段和bin字段,package.json的scripts字段指定了运行脚本命令的npm命令行缩写,比如上面的start指定了运行npm run start时,所要执行的命令"node index.js"。这更加方便我们调用指令,不用输入一大串的指令来调用模块。
bin字段则指定各个内部命令对应的可执行文件的位置,比如上面的weather指定了可执行文件index.js的位置。下面我们还会相信讲解发布一个node包时,bin的用法。
四、如何发布自己的npm包
在熟悉了npm的使用方法后,我们可以尝试自己写一个简单的npm包,并发布上线,首先我们需要一个npm账号,可以在npm官网,注册一个账号。在完成邮箱验证后就可以发布自己的包了。
在制作自己的node包时,首先我们新建一个项目文件夹,cd到文件夹中,使用
npm init
来创建package.json文件,然后安装自己的开发依赖包和运行依赖包,最后把可执行文件的位置添加到bin字段,使用者就可通过bin字段的命令来快捷执行可执行文件,需要注意的是当js文件作为可执行文件时需要在文件的开始添加
#!/usr/bin/env node
这样文件就会默认在node环境中执行。
我们可以通过命令:
npm login
来登录npm账号
通过
npm publish
来发布完成的node包
当修改一个包后重新发布时,需要修改版本号,才可以发布上线,在发布时最好有一个readme.md来说明如何使用和包的功能示例。
更多详细的npm相关介绍可查看npm官方文档
网友评论