1.NodeJS模块

       每一个Nodejs都是一个NodeJS模块,包括JS文件,JSON文本文件,二进制模块文件。

a.模块的应用               新建一个文件mytest.js,输入如下代码:

function hello() { console.log('Hello'); } function world() { console.log('World'); }

这就是一个NodeJS模块,但是怎么在其他模块中引入呢?我们需要为模块提供对外的接口,这就用到module.exports和exports.

我们可以这样写:

function hello() { console.log('Hello'); }

function world() { console.log('World'); }

exports.hello=hello;

exports.world=world;

在其他模块引用时,可以使用require(module_name);载入需要的模块。

Eg: var hello=require('./mytest');或者var hello=require('./mytest.js');

hello.hello();

hello.world();

也可以这样写:

function Hello(){

this.hello=function(){console.log('hello');};

this.world=function(){console.log('world');};

}

module.exports=Hello;

引用时,就要写为 var hello=new Hello(); hello.hello(); hello.world();

b.module.exports和exports

             module是一个对象,每个模块中都有个module对象,module是当前模块的一个引用。module.exports对象时Modul系统 创建的,而exports可以看做是对module.exports对象的一个引用。在模块中require引用另一个模块时,以module.exports的值为标准,具体关系如下:

// module.exports和exports相同的情况
var m = {}; // 表示 module
var e = m.e = {}; // e 表示 exports, m.e 表示 module.exports m.e.a = 5;
e.b = 6; console.log(m.e); // Object { a: 5, b: 6 }
console.log(e); // Object { a: 5, b: 6 }
// module.exports和exports不同的情况
var m = {}; // 表示 module
var e = m.e = {}; // e 表示 exports, m.e 表示 module.exports m.e = { c: 9 }; // m.e(module.exports)引用的对象被改了
e.d = 10; console.log(m.e); // Object { c: 9 }
console.log(e); // Object { d: 10 }

2.NodeJS包

包用于管理多个模块以及依赖关系,可以对多个模块进行封装,包的根目录必须包含package.json文件,package.json文件是CommonJS规范用于描述包的文件,符合CommonJS规范的package.json文件应该包含以下字段:

1.name:包名。包名是唯一的,只能包含小写字母,数字和下划线。

2.version:包版本号。

3.description:包说明。

4.keywords:关键字数组。用于搜索。

5.homepage:项目主页。

6.bugs:提交bug的地址。

7.license:许可证。

8.maintainers:维护者数组。

9.contributors:贡献者数组。

10.repositories:项目仓储托管数组。

11.dependencies:包依赖。

{ "name": "mytest",

"description": "My test package.",

"version": "0.1.0",

"keywords": [ "mytest", "nodejs" ],

"maintainers": [{ "name": "test", "email": "test@mytest.com" }],

"contributors": [{ "name": "test", "web": "http://www.mytest.com/" }],

"bugs": { "mail": "test@mytest.com", "web": "http://www.mytest.com/" },

"licenses": [{ "type": "Apache License v2", "url": "http://www.apache.org/licenses/apache2.html" }],

repositories": [{ "type": "git", "url": "http://github.com/test/test.git" }],

"dependencies": { "webkit": "1.2", "ssl": { "gnutls": ["1.0", "2.0"], "openssl": "0.9.8" } } }

3.npm包管理工具

npm可以从第三方网站(http://www.npmjs.prg/)上下载第三方NodeJS包。

搜索第三方包:

sudo npm search express

安装包:

sudo npm install -g express

更新包:

sudo  npm update express

卸载包:

sudo npm uninstall express

NodeJS模块、包、NPM的更多相关文章

  1. Node.js 安装第三方模块包(npm),通过 package.json配置信息安装项目依赖的模块

    npm下载安装的第三方模块包官网(提供包名和使用方法):https://www.npmjs.com/ 淘宝镜像(国内,比较快):https://npm.taobao.org/ commonjs01.j ...

  2. 前端笔记之NodeJS(二)路由&REPL&模块系统&npm

    一.路由机制(静态资源文件处理) 1.1 Nodejs没有根目录 MIME类型:http://www.w3school.com.cn/media/media_mimeref.asp 在Apache中, ...

  3. 使用NodeJS模块-第三方提供的模块(什么是npm)

    第三方开发者提供的模块 第三方模块是由NodeJS社区或第三方个人开发的功能模块,这些功能模块以软件包的形式存在.被发布在npmjs注册表中.npmjs是一个注册中心,所有软件包的信息都会被记录到该注 ...

  4. nodejs的包管理器npm和cnpm

    http://www.ydcss.com/archives/18 3.npm介绍 3.1.说明:npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装 ...

  5. NPM下载模块包说明

    博主对npm包安装收集了各种资料和实践后对它们之间的差异整理,写下这篇文章避免自己忘记,同时也给node.js猿友一点指引. 我们在使用 npm install 安装模块的模块的时候 ,一般会使用下面 ...

  6. # nodejs模块学习: express 解析

    # nodejs模块学习: express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子 ...

  7. Vue学习笔记之Nodejs中的NPM使用

    0x00 NPM是什么 简单的说,npm就是JavaScript的包管理工具.类似Java语法中的maven,gradle,python中的pip. 0x01 NPM安装 傻瓜式的安装. 第一步:打开 ...

  8. nodejs模块学习: webpack

    nodejs模块学习: webpack nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子来解决现实 ...

  9. NodeJS——模块全局安装路径配置以及关于supervisor的问题解释

    下载安装NodeJS后,在自己选择的路径下会有如下的文件: 默认情况下NodeJS安装会同时安装npm(模块管理器:用于管理用户require的模块,有全局和本地两种). 注:全局:执行npm  in ...

随机推荐

  1. Python判断是否是数字(无法判断浮点数)(已解决)

    s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...

  2. 浅谈objective—C管理内存

    这段时间被导师催着论文,调试各种BUg,也是醉了,发现很大程度上,内存出错,栈溢出,各种悲剧.那么今天就和大家一起对OC的内存管理来个探微吧.Objective-C使用一个保留计数记录了我们所创建的所 ...

  3. vim命令收集(持续中)

    保存: 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件, ...

  4. C# WinForm自定义控件响应键盘事件

    自己定义的winform控件,用其他键盘事件都无法响应,只有用ProcessCmdKey事件可以达到目的(别忘了主窗体的KeyPreview属性要设置为true),写法如下:         prot ...

  5. SQL*PLUS下使用AUTOTRACE、sql顾问、实时sql监控

    高级SQL优化(三) 常用优化工具 ——<12年资深DBA教你Oracle开发与优化—— 高级SQL优化(一) ——<12年资深DBA教你Oracle开发与优化——性能优化部分 1 aut ...

  6. 一步一步实现Linux设备驱动的Helloworld模块

    学了那么多程序语言,总是有一个Hello world开头,不禁感叹Hello world的强大.呵呵,废话少说,咋们的故事当然要从这个Hello world开始. 先查看自己OS使用的内核版本[don ...

  7. Android--ViewPager的无限轮播

    ViewPage_RadioButton实现带小圆点的无限轮播,效果还能凑合着用. 1.在ViewPage的监听里面这样处理 @Override public void onPageSelected( ...

  8. hdu 1718 Rank

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1718 Rank Description Jackson wants to know his rank ...

  9. C# 获取图片的EXIF 信息

    关于 EXIF 信息的介绍. 1  EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写.EXIF是一种图像文件格式,只是文件的后缀名为jpg.EXIF信息是由数码相 ...

  10. 怎么解决/bin/sh: arm-linux-gcc: not found make

      1.arm-linux-gcc 环境变量没有设,所以找不到这个编译器 在/etc/profile里添加arm-linux-gcc的存放路径 sudo -s gedit /etc/profile 编 ...