问题1:利用package.json来指定文件夹
package.json中内容如下:
{ "name" : "some-library", "main" : "./lib/hello.js" }文件目录如下:
require.js内容如下:
var b=require('./some-library'); console.log(b.name);some-library/lib/hello.js中内容:
exports.name="qinliang";
这时候当在folderModule下执行node require.js时候就会去目录some-libray查找package.json,然后根据package.json映射到some-libray/lib/hello.js中,最后输出'qinliang'
注意:如果在some-library中没有查到package.json,这时候就会默认加载some-library中的index.js/index.node,如下:
其中index.js中的内容是:
exports.name="fkl";这时候不再打印hello.js中的'qinliang',而是index.js中的'fkl'.
问题2:借助于node-modules目录完成
如果require函数的参数不是相对路径,也不是核心模块名,Node会在当前目录的node_modules子目录下查找,比如下面的代码,Node会尝试查找文件./node_modules/myModule.js:
var myModule = require('myModule.js');如果没找到,Node会继续在上级目录的node_modules文件夹下查找,如果还没找到就继续向上层目录查找,直到找到对应的模块或者到达根目录。
我们在上面的目录下新建一个path.js,其内容:
console.log(module.paths);然后我们运行可以看到node.js对于模块的搜寻过程如下:
[ 'C:\\Users\\Administrator\\Desktop\\folderModule\\some-library\\lib\\node_modules', 'C:\\Users\\Administrator\\Desktop\\folderModule\\some-library\\node_modules', 'C:\\Users\\Administrator\\Desktop\\folderModule\\node_modules', 'C:\\Users\\Administrator\\Desktop\\node_modules', 'C:\\Users\\Administrator\\node_modules', 'C:\\Users\\node_modules', 'C:\\node_modules' ]问题3:模块缓存问题:
新建一个文件my-module.js
console.log('module my_module initializing...'); module.exports = function() { console.log('Hi!'); }; console.log('my_module initialized.');然后在一个主模块中多次调用,我们看到模块只被初始化一次:
var myModuleInstance1 = require('./my-module'); var myModuleInstance2 = require('./my-module'); //两次加载模块输出为:
module my_module initializing... my_module initialized.
问题4:最后再强调一下模块循环引用的问题,有兴趣的可以自己查看node.js的循环依赖