Node.js的npm包管理器基础使用教程


Posted in Javascript onMay 26, 2016

配置

npm set

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将记录模块的确切版本,而不是一个可选的版本范围。

2.

npm config get prefix

3.

npm config set prefix /usr/local

npm使用
安装:

npm install grunt-cli

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

本地安装: 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]

(1)添加?save 参数安装的模块的名字及其版本信息会出现在package.json的dependencies选项中
(2)添加?save-dev 参数安装的模块的名字及其版本信息会出现在package.json的devDependencies选项中
(3)添加?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

查看
查看安装了那些包

npm ls --depth=0

查看特定包具体信息

npm ls grunt-cli
npm info grunt-cli

搜索

npm search grunt-cli

发布
1.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 目录下。

name: package的名字(由于他会成为url的一部分,所以 non-url-safe 的字母不会通过,也不允许出现"."、"_"),最好先在[](http://registry.npmjs.org/上搜下你取的名字是否已经存在)
version: package的版本,当package发生变化时,version也应该跟着一起变化,同时,你声明的版本需要通过semver的校验(semver可自行谷歌)
dependencies: package的应用依赖模块,即别人要使用这个package,至少需要安装哪些东东。应用依赖模块会安装到当前模块的node_modules目录下。
devDependencies:package的开发依赖模块,插件发布的时候自动删除不相关代码。用个文件记录一下当前项目中安装或者需要的插件,即别人要在这个package上进行开发,可以一键安装项目所需插件。

2.版本号
大家也注意到 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文件。

Javascript 相关文章推荐
js静态作用域的功能。
Dec 25 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
写得不错的jquery table鼠标经过变色代码
Sep 27 Javascript
基于豆瓣API+Angular开发的web App
Jan 02 Javascript
JavaScript生成随机数的4种自定义函数分享
Feb 28 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
Jun 23 Javascript
给angular加上动画效遇到的问题总结
Feb 17 Javascript
jquery+Jscex打造游戏力度条
Sep 12 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
利用forever和pm2部署node.js项目过程
May 10 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
Apr 24 Javascript
Postman无法正常返回结果问题解决
Aug 28 Javascript
JavaScript中的各种操作符使用总结
May 26 #Javascript
浅析JavaScript中的对象类型Object
May 26 #Javascript
简单总结JavaScript中的String字符串类型
May 26 #Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
May 26 #Javascript
JavaScript中的Number数字类型学习笔记
May 26 #Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 #Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 #Javascript
You might like
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
iOS10推送通知开发教程
2016/09/19 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
简单介绍Python中的floor()方法
2015/05/15 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
python获取外网ip地址的方法总结
2015/07/02 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
用python写爬虫简单吗
2020/07/28 Python
django创建css文件夹的具体方法
2020/07/31 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
可贵的沉默教学反思
2014/02/06 职场文书
中国梦口号
2014/06/13 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
考研英语辞职信
2015/05/13 职场文书
意外事故赔偿协议书
2016/03/22 职场文书