在这里回答我自己的问题,但至少有两种方法可以实现这一点......
(1)删除缓存
如何在node.js中的“require”之后删除模块?
var Test1 = require('./import.js');
delete require.cache[require.resolve('./import.js')]
var Test2 = require('./import.js');
var one = new Test1(1,2);
var two = new Test2(3,4);
one.run()
1 2
two.run()
3 4
看起来甚至没有那么混乱,尽管它的效率非常低,并且以这种方式编写代码会很快变得昂贵......
(2) 使用函数范围
因为 require 读取文件然后运行它,
var Test = require('./test.js');
相当于
var Test = eval( fs.readFileSync('./test.js', 'utf8') );
因此,如果您不使用 require,而是读取该文件,则可以在函数内部建立新的作用域:
var fs = require('fs');
var File = fs.readFileSync('./import.js', 'utf8');
var Test1, Test2;
(function(){ Test1 = eval(File); })();
(function(){ Test2 = eval(File); })();
文件内的 self 现在将存储在您创建的函数范围内。所以再一次:
var one = new Test1(1,2);
var two = new Test2(3,4);
one.run()
1 2
two.run()
3 4
有点混乱,但比每次删除缓存并重新读取文件要快得多。