NPM

NPM(node package manager)
主要功能:安装、卸载、更新、查看、搜索、发布javascript

1.npm的配置
2.npm的使用:package的安装、卸载、升级、查看、搜索、发布html

  • npm包的安装模式,本地 vs 全局java

  • package版本:常见版本声明形式node

3.package.json:包描述信息git

npm

配置

npm setgithub

npm set init-author-name 'Your name'
npm set init-author-email 'Your email'
npm set init-author-url 'http://yourdomain.com'
npm set init-license 'MIT'

上面命令等于为npm init设置了默认值,之后执行npm init的时候,package.json的做者姓名、邮件、主页、许可证字段就会自动写入预设的值。这些信息会存放在用户主目录的~/.npmrc文件,使得用户不用每一个项目都输入。
若是某个项目有不一样的设置,能够针对该项目运行npm config
1.npm set save-exact true
上面命令设置加入模块时,package.json将记录模块的确切版本,而不是一个可选的版本范围。redis

2.npm config get prefixexpress

3.npm config set prefix /usr/localnpm

npm使用

安装

npm install grunt-cli
安装以前,npm install会先检查,node_modules目录之中是否已经存在指定模块。若是存在,就再也不从新安装了,即便远程仓库已经有了一个新版本,也是如此。
若是你但愿,一个模块不论是否安装过,npm 都要强制从新安装,可使用-f或--force参数。json

  • 本地安装: package会被下载到当前所在目录,也只能在当前目录下使用。安装结束后,当前目录下回多出一个node_modules目录,grunt-cli就安装在里面。
    npm install -g grunt-cli

  • 全局安装:package会被下载到到特定的系统目录下,安装的package可以在全部目录下使用。如今变成了/usr/local/lib/node_modules/grunt-cli,/usr/local/lib/node_modules/也就是以前所说的全局安装目录啦。

1.安装当前目录package.json文件中配置的devDependencies模块
npm install

2.安装本地的模块文件
npm install ./package.tgz
3.安装指定URL的模块
npm install https://github.com/indexzero/forever/tarball/v0.5.6
4.安装本地文件系统中指定的目录包含的模块
npm install <folder>
5.安装并更新package.json中的版本配置
npm install <name> [–save|–save-dev|–save-optional]

  • 添加–save 参数安装的模块的名字及其版本信息会出如今package.json的dependencies选项中

  • 添加–save-dev 参数安装的模块的名字及其版本信息会出如今package.json的devDependencies选项中

  • 添加–save-optional 参数安装的模块的名字及其版本信息会出如今package.json的optionalDependencies选项中

6.安装模块的指定版本
npm install <name>@<version>
Example:
npm install underscore@1.5.2
7.安装模块指定版本号范围内的某一个版本
npm install <name>@<version range>
Example:
npm install async@”>=0.2.0 <0.2.9″

–force强制拉取远程资源,即便本地已经安装这个模块
Example:
npm install underscore –force

8.-g或–global全局安装模块,若是没有这个参数,会安装在当前目录的node_modules子目录下
Example:
npm install -g express

若是你但愿,全部模块都要强制从新安装,那就删除node_modules目录,从新执行npm install。

$ rm -rf node_modules
$ npm install

更新

npm update [-g] [<name> [<name> … ]
更新指定name列表中的模块。-g参数更新全局安装的模块。
若是没有指定name,且不是在某个模块内,会更新当前目录依赖的全部包都会被更新(包括全局和模块内);若是当前目录在某个模块目录内,会更新该模块依赖的模块,因此不指定name直接运行npm update时,最好在某个模块内运行,以避免更新到其余不想更新的模块。

卸载

npm uninstall package

查看

  1. 查看安装了那些包
    npm ls --depth=0

  2. 查看特定包具体信息
    npm ls grunt-cli

npm info grunt-cli

搜索

npm search grunt-cli

发布

package.json

package.json说明

npm命令运行时会读取当前目录的 package.json 文件和解释这个文件,这个文件基于 Packages/1.1规范。在这个文件里你能够定义你的应用名称( name )、应用描述( description )、关键字( keywords )、版本号( version )、应用的配置项( config )、主页( homepage )、做者( author )、资源仓库地址( repository )、bug的提交地址( bugs ),受权方式( licenses )、目录( directories )、应用入口文件( main )、命令行文件( bin )、应用依赖模块( dependencies )、开发环境依赖模块( devDependencies )、运行引擎( engines )和脚本( scripts )等。

对于开发者而言,开发和发布模块都依赖于他对这个文件 package.json 所包含的意义的正确理解。咱们下面用一个本文共用的例子来讲明:

{
    "name": "test",
    "version": "0.1.0",
    "description": "A testing package",
    "author": "A messed author <messed@example.com>",
    "dependencies": {
        "express": "1.x.x",
        "ejs": "0.4.2",
        "redis": ">= 0.6.7"
    },
    "devDependencies": {
        "vows": "0.5.x"
    },
    "main": "index",
    "bin": {
        "test": "./bin/test.js"
    },
    "scripts": {
        "start": "node server.js",
        "test": "vows test/*.js",
        "preinstall": "./configure",
        "install": "make && make install"
    },
    "engines": {
        "node": "0.4.x"
    }
}

这个例子里咱们定义了应用的入口文件( main )为 index ,当其余应用引用了咱们的模块 require('test') 时,这个 main 的值 index.js 文件被调用。脚本( scripts )使用hash 表定义了几个不一样的命令。script.start 里的定义的 node server.js 会在 npm start 时被调用,一样的 npm test 调用时对应的 scripts.test 里定义的命令被调用。在有些 native 模块须要编译的话,咱们能够定义预编译和编译的命令。

本例中还定义了应用依赖模块( dependencies )和开发环境依赖模块( devDependencies )。应用依赖模块会在安装时安装到当前模块的 node_modules 目录下。开发环境依赖模块主要时在开发环境中用到的依赖模块,用命令 npm 的命令 install 或 link 加上参数 —dev 安装到当前模块的 node_modules 目录下。

  1. name: package的名字(因为他会成为url的一部分,因此 non-url-safe 的字母不会经过,也不容许出现"."、"_"),最好先在[](http://registry.npmjs.org/上搜下你取的名字是否已经存在)

  2. version: package的版本,当package发生变化时,version也应该跟着一块儿变化,同时,你声明的版本须要经过semver的校验(semver可自行谷歌)

  3. dependencies: package的应用依赖模块,即别人要使用这个package,至少须要安装哪些东东。应用依赖模块会安装到当前模块的node_modules目录下。

  4. devDependencies:package的开发依赖模块,插件发布的时候自动删除不相关代码。用个文件记录一下当前项目中安装或者须要的插件,即别人要在这个package上进行开发,能够一键安装项目所需插件。
    其余:参见官网

版本号

你们也注意到 package.json 里的版本号有些是 >= 0.6.7 有些是 1.x.x,这有什么区别?npm 使用于语义化的版本识别来进行版本管理。并非全部的模块都会提供向后兼容性,有时候某些模块由于某些缘由致使不向后兼容。因此咱们须要定义一些规则来保证模块可以在某些特定的版本中可用,而且保证能用最新的版本,由于那些版本老是修改了一些 bug 或提高了性能等。咱们来看一下版本定义的字段:

例子:0.4.2

+ 大版本(0)
+ 小版本(4)
+ 补丁版本(2)

一个软件发布的时候,默认就是 1.0.0 版。若是之后发布补丁,就增长最后一位数字,好比1.0.1;若是增长新功能,且不影响原有的功能,就增长中间的数字(即小版本号),好比1.1.0;若是引入的变化,破坏了向后兼容性,就增长第一位数字(即大版本号),好比2.0.0。

在上面 package.json 的定义里咱们确信模块在全部的 Nodejs 0.4及以上和0.5如下版本里都能运行。依赖模块 redis 在全部大于或等于0.6.7的版本上都能运行,依赖模块 ejs 只能确保运行在0.4.2版本里,依赖模块 express 确保可以兼容大于或等于1.0.0而且小于2.0.0。

生成

npm init
用来初始化生成一个新的package.json文件。它会向用户提问一系列问题,若是你以为不用修改默认配置,一路回车就能够了。
若是使用了-f(表明force)、-y(表明yes),则跳过提问阶段,直接生成一个新的package.json文件。

npm官方文档
npm模块管理器
如何使用NPM来管理你的Node.js依赖

相关文章
相关标签/搜索