节点“ require”语法创建模块的新引用

时间:2018-10-04 10:13:16

标签: javascript node.js

我有那些文件

/Controller/sub_module/conversation.js

var test = [];
function push(){
    test.push(test.length);
}
module.exports = {
    push,
    getTest(){
      return test;
    }
}

/index.js(从根开始)

require('../chatserver/Controller/sub_module/conversation').push();//push new item to test variable

,然后在/Controller/index.js

const test1 = require('../Controller/sub_module/conversation').getTest();//return [0]
const test2 = require('./sub_module/conversation').getTest(); //return []

test1和test2没有指向同一参考,为什么? 节点8.11.3 IDE Webstorm Debug image

2 个答案:

答案 0 :(得分:2)

感谢@ T.J。Crowder:this

我认为所有相对路径都将转换为用于名称缓存的绝对路径,并且在此转换中,相对路径的未指定部分将是自动小写字母。

因为该节点将考虑

require('./sub_module/conversation') //the unspecified part is 'Controller' will be convert to 'controller'

相同
require('../controller/sub_module/conversation')

但与

不同
require('../Controller/sub_module/conversation')

答案 1 :(得分:-1)

require d模块不应用作单例存储。在节点中,require()仅在您需要该模块使用的文件位于同一目录中时,才对同一模块返回相同的引用。否则,甚至This post.

中详细说明的NPM模块也不同。