0

我在这里有 app.js:

let x = 5;
const print = require('./print')
print()

我这里有 print.js

module.exports = function(){
console.log(x)
}

有没有一种好方法可以在 print.js 函数中使用 app.js 中的变量?我在实际应用程序中使用了更多变量,因此我想避免使用参数。

4

2 回答 2

1

你不能或不应该。这不是 node.js 中模块化架构的工作方式。不像浏览器的混乱世界,许多代码体只是在全局范围内声明无数东西,然后一切都可以使用,node.js 是模块化的。每个文件通常是它自己的模块。它必须导出它希望共享的东西,而其他模块必须导入它的导出才能使用它们。

如果你想与另一个模块共享数据,你可以调用一些函数并将数据传递给它。

虽然 node.js 中有全局变量(您可以分配类似的东西global.x = 5,然后在任何地方引用它们),但强烈、强烈不鼓励使用全局变量,除了平台定义的内置 node.js 功能(不是由应用程序定义)。

全局变量存在问题的原因有很多,而且项目越大、参与的人越多或使用的第三方代码库越多,情况就会变得更糟。如果你真的想了解更多,你可以搜索“为什么全局变量在 Javascript 中不好”并找到关于该主题的各种讨论。

node.js 的模块化架构是我们拥有 NPM 和数以万计在 node.js 中工作的易于重用的代码模块的原因之一。这些代码段都使用相同的模块化架构,使它们能够在任何应用程序中统一使用,符号冲突或模块与现有代码冲突的风险要小得多。而且,模块化架构清楚地定义了对其他代码段的依赖关系,因此模块可以自包含并加载它所依赖的任何模块,甚至是与项目中其他代码正在使用的模块版本不同的模块。通过全局变量共享代码时,这些都不起作用。

我会重复一遍。在 node.js 中,如果你想在模块之间共享一个函数或数据,你可以在一个模块中导出它并在另一个模块中导入它。

于 2020-01-03T19:53:25.417 回答
0

将这些变量分配给global对象。

global.x = 5;
const print = require('./print')
print()
module.exports = function(){
console.log(global.x)
}

于 2020-01-03T19:53:15.250 回答