node.js是什么?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
有了Node.js,我们也不用依赖浏览器来调试我们js代码了。
安装完毕之后,就可以使用了。
每个.js文件nodejs就认为是一个模块。
例如:nodejs1.js
'use strict' var s = 'Hello'; var b = 'Bye'; function greet(name){ console.log(s+','+name+'!'); } function goodBye(name){ console.log(b+','+name); } module.exports = greet; module.exports = goodBye;
最后exports表示向外提供的函数或者对象(函数也是对象)
main.js 'use strict' var g = require('./nodejs1'); var s = 'Kevin'; g(s)
结果是什么?
Bye,Kevin
引入nodejs1这个模块,最后只应用了该模块最后一行向外提供的对象,如何都应用?留个问题在这里。
nodejs向外提供对象有两种方式
exports.obj1 = greet; exports.obj2 = goodBye;
或者
module.exports = { obj1: greet, obj2: goodBye };
这两个是等效的。
但是使用exports只能用.(点操作符)来赋值,不能用类似初始化,来初始化exports
例如:
exports = {
obj1: greet,
obj2: goodBy
} 是错误的,有些IDE会直接提示编译错误,这是nodejs内部实现导出模块决定的。
如果我们要编写一个模块,一定要确保别人引用的时候是可以使用的。
刚才的问题就有了答案了,我们如果要对外提供模块中的两个对象,需要用
exports.obj1 = greet; exports.obj2 = goodBye;
或者
module.exports = { obj1: greet, obj2: goodBye };
而不能是我上边写的,这样写等于是重新给module.exports赋值了,引用就换成了goodBye的引用了。
既然是向外提供对象,那就不仅仅是函数了。只要是对象就可以向外提供,例如:
module.exports = { obj1: greet, obj2: goodBye, default:"hahaha" };
var greet = require('./nodejs1'); var s = 'Kevin'; greet.obj1(s); var def = greet.default; console.log(def);
输出:
Hello,Kevin!
哈哈哈