一、课程介绍
1.1 课程内容
本次课程对Node.js模块和 Node.js包进行介绍。你将学习如何创建、导入模块,如何创建包和使用npm对包进行管理。
1.2 课程知识点
Node.js 模块(module)的概念及如何导出和导入模块。
Node.js 包(package)的创建方法
npm包管理工具的使用
1.3 课程环境
Xfce终端
Node.js v4.2.1
gedit/vim:文本编辑
二、课程步骤
2.1 Node.js模块(module)
每一个 Node.js 文件都是一个 Node.js 模块,包括JavaScript文件(.js)、JSON文本文件(.json)和二进制模块文件(.node)。
2.1.1 模块的使用
编写一个模块:
新建一个文件mymodule.js,输入如下代码并保存:
function hello() { console.log('Hello'); } function world() { console.log('World'); }
这就是一个Node.js模块,但是怎么在其他模块中引入并使用这个模块呢?我们需要为模块提供对外的接口,这就要用到module.exports和exports。
我们可以这样写mymodule.js:
function hello() { console.log('Hello'); } function world() { console.log('World'); } exports.hello = hello; exports.world = world;
在其他模块中,可以使用require(module_name);载入需要的模块,如,新建index.js,输入如下代码并保存:
var hello = require('./mymodule'); // 也可以写作 var hello = require('./mymodule.js'); // 现在就可以使用mymodule.js中的函数了 hello.hello(); // >> Hello hello.world(); // >> World
也可以这样写mymodule.js:
function Hello() { this.hello = function() { console.log('Hello'); }; this.world = function() { console.log('World'); }; } module.exports = Hello;
此时,index.js就要改成这样:
var Hello = require('./mymodule'); var hello = new Hello(); hello.hello(); // >> Hello hello.world(); // >> World
2.1.2 module.exports和exports
module是一个对象,每个模块中都有一个module对象,module是对当前模块的一个引用。module.exports对象是由Module系统创建的,而exports可以看作是对module.exports对象的一个引用。在模块中require另一个模块时,以module.exports的值为准,因为有的情况下,module.exports和exports它们的值是不同的。module.exports和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 } //V型知识库www.vxzsk.com
-
// 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.2 Node.js包(package)
2.2.1 包
包用于管理多个模块及其依赖关系,可以对多个模块进行封装,包的根目录必须包含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:包依赖。
下面是一个package.json示例:
{ "name": "vxzsk", "description": "vxzsk test package.", "version": "0.1.0", "keywords": [ "shiyanlou", "nodejs" ], "maintainers": [{ "name": "test", "email": "test@vxzsk.com" }], "contributors": [{ "name": "test", "web": "https://www.vxzsk.com/" }], "bugs": { "mail": "test@vxzsk.com", "web": "https://www.vxzsk.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" } } }
package.json文件可以自己手动编辑,但为了方便,更推荐通过npm init命令进行生成。你可以自己尝试在终端中输入npm init命令来生成一个包含package.json文件的包。
2.2.2 npm包管理工具
由于本案例环境网络限制,所以npm命令会连接taobao的源,而不会直接连接官方源。
npm 也可以从第三方网站(http://www.npmjs.org/)上下载第三方Node.js包。
通过npm安装的包会按包名字母顺序出现在package.json中的dependencies字段中。
在本案例的环境中搜索包(默认会连接到taobao的Node.js源):
$ npm search express //搜索express包
安装包
$ npm install -g express //安装包,-g即global全局安装
更新包
$ npm update express
卸载包
$ npm uninstall express
三、课程总结
在Node.js中,每个.js文件都是一个module, module中的对象通过module.exports导出。引用其他module中的对象通过require语句实现。
包含有package.json的一个文件夹是一个Node.js包,Node.js的包依赖管理(搜索、安装、更新、卸载)通过npm完成,通过npm init命令可以在文件夹中初始化一个包。
四、课后习题
1 请你在自己的电脑中使用npm init命令创建一个包
2 [可选]请你尝试从github或其他网站下载一个别人创建的包,使用npm解决包中的依赖问题。
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程