javascript - Node.js 两次调用 require()

标签 javascript node.js

//lib.js
var opt = 0

exports.set = function(arg) {
   opt = arg
}

exports.prn = function() {
   console.log(opt)
}


///prog.js
var lib = require('./lib')
var lib2 = require('./lib')
lib.set(222)
lib2.set(333)
lib.prn()
lib2.prn()

prog.js 将输出: 333 333

但我需要它来输出: 222 333

换句话说,opt 对于变量 lib 和变量 lib2 必须是唯一的。如何实现?

最佳答案

那是因为通常 nodejs 会缓存通过 require 获取的模块。您可以使用以下助手:

// RequireUncached.js
module.exports = function(module) {
    delete require.cache[require.resolve(module)]
    return require(module);
}

以及助手的使用:

var requireUncached = require('RequireUncached.js');
requireUncached("./lib"); 

请记住,这种方法被认为是不好的做法,不应使用。我建议将您的逻辑包装到一个函数中,需要模块并调用该函数。所以,每次你得到一个新的实例。

关于javascript - Node.js 两次调用 require(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303764/

相关文章:

javascript - 使用 Nodejs writeFile 清空 JSON

node.js - Angular 应用程序需要 Node.js

javascript - 为什么这个简单的比较在 JavaScript 中不能正常工作?

javascript - onClick 菜单 w/Meny JS

javascript - 如何删除 Mongoose 模式中的引用值

javascript - 如何获得垂直对齐元素的正确顶部位置?

javascript - Node.js 中的错误和数据回调参数

javascript jquery : show URL parameters on load

javascript - Node JS 中的 promise 圈内的 promise 圈

javascript - 如何从不同的 JS 文件访问 EJS 文件中的变量