【问题标题】:Replace specific piece of code in node.js custom module替换 node.js 自定义模块中的特定代码
【发布时间】:2020-07-17 17:50:39
【问题描述】:

假设我有一个名为“pink.js”的模块。 该模块内部是以下代码:

var color = 'red+white'
module.exports = color

现在在另一个文件中,假设我们执行以下操作:

const pink = require('./pink')
console.log(pink) //Logs 'red+white'

然后假设我们想通过重新请求文件将pink.js 中color 的值更改为'red+blue',然后重新请求它。

const pink = require('./pink')
console.log(pink) //Logs 'red+white'

//Code to replace the value of color in pink.js to 'red+blue'

//Re-requiring:
const pink2 = require('./pink')
console.log(pink2) //Logs 'red+blue'

我该怎么做呢?

如果可能的话,我可以对 require.js 这样的实际模块执行此操作吗?

如何使用它的示例: 仅使用代码在本地修补模块中的简单问题。可能会自动执行该过程。

谢谢!

【问题讨论】:

  • 首先,为什么您需要重新要求它?总之,每当模块的值发生变化时,您都将重新运行您的应用程序,并且这些值将是最新的。除此之外,如果您需要在 2 个不同的模块之间进行通信,您应该公开方法来这样做。您能否详细说明您的需求?
  • @DiogoLessa 这不是必需品,它更像是一种“可能”的事情。
  • 答案是否定的。一旦您需要一个文件,除非您修改并重新运行您的应用程序,否则它将具有相同的值。这就是为什么我要问你是如何提出这个问题的。通常,每个模块都有自己的隔离范围。如果第一个模块返回一个字符串并且没有提供更改它的方法,则它只是一个只读值。只有重新要求不会改变任何事情。
  • @DiogoLessa 哦,好吧。如果您想将其作为答案,我会将其标记为已解决。谢谢你:)

标签: javascript node.js replace fs


【解决方案1】:

答案是否定的。

一旦您需要一个文件,除非您修改并重新运行您的应用程序,否则它将具有相同的值。通常,每个模块都有自己的隔离范围。如果第一个模块返回一个字符串并且没有提供更改它的方法,则它只是一个只读值。仅重新要求不会改变任何事情。

干杯,

【讨论】:

    【解决方案2】:

    可能是这样的:

    // Main.js
    var Color = (module.exports = {
      value: 'red+white',
      changeColor: (newColor) => (Color.color = newColor),
    })
    
    
    // AnotherFile.js
    var color = require('./main')
    
    color.changeColor('red+blue')
    
    console.log(color.value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 2018-08-10
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2016-12-04
      相关资源
      最近更新 更多