在nodejs中,以模块为单位划分所有的功能,并且提供了一个完整的模块加载机制,这时我们可以将应用进程划分为各个不同的部分。
nodeJS中,一个JavaScript文件中定义的变量,函数,都只在这个文件内部有效,当需要从模块外部引入这些变量,函数时,必须用exports对象进行暴露。使用者要用require()命令引入这个JS文件。
nodejs中,JS文件和JS文件就是被一个个exports和requie构建成为网状的。而不是通过包裹在HTML中产生联系的。
可以将一个Javascript文件中,描述一个类,用
module.export = 构造函数名;
的方式向外暴露一个类。
当我们在模块中引入文件,不写“./”时,就默认是从一个名为node_modules的文件中引入文件。
例如现有如下结构的文件夹:
当我们在01.js文件中写入代码:
var foo = require("foo.js");
console.log(foo.msg);
我们没有写foo的具体路径,这时,这个foo.js文件就默认是从node_modules文件中引入的文件。
node_modules文件夹中defoo.js文件中的内容为:
var msg = "haha";
exports.msg = msg;
o1.js文件的执行结果是:haha
而且即使node_modules文件不放在和01.js同级的目录下,而是把node_modules文件放在与其根文件夹同级的目录下,即如下所示:
也可以遍历文件夹,将node_modules这个文件夹找到,但是不可以将它放入与它不在同一级目录的文件夹里面,这样就无法找到文件。
如果我们在02.js中这样写:
var bar = require("bar");
console.log(bar);
console.log(bar.msg);
我们请求的一个文件夹,这个文件夹也没有指明具体的路径,此时我们默认这个文件夹在node_modules文件夹下的一个文件夹,而且暴露的文件模块默认是从一个Index,js的文件中暴露出来的。
但此时若我们将jindex.js的文件名重命名为app.js,我们将该怎样告诉计算机,现在你应该从我的app.js文件中找,而不是Index.js文件呢?
实现办法就是在bar文件夹下添加一个package,json文件夹,并且在 代码中:
(package.json文件夹要放在文件的根目录中去)
{
"name": "kaolabar",
"version": "0.0.1",
// main表示入口文件
"main":"app.js"
}
通过main告诉外界,现在我是通过app.js这个文件向外部暴露接口