Node.js 为什么我不能使用require函数的参数作为变量

Node.js 为什么我不能使用require函数的参数作为变量,node.js,Node.js,当我试图通过require加载模块时,我不能通过向那个里传递一个变量来完成,我只能在那个里硬编码它 例如,该代码可以工作: const module = require('module') 但以下代码不适用: const moduleName = 'module' const module = require(moduleName) 这有点奇怪,有人知道为什么吗?根据打包机的工作方式,这在require中是不可能的。 打包在运行时之前进行一次,因此这些变量还没有值。Normal node.j

当我试图通过require加载模块时,我不能通过向那个里传递一个变量来完成,我只能在那个里硬编码它

例如,该代码可以工作:

const module = require('module')
但以下代码不适用:

const moduleName = 'module'
const module = require(moduleName)

这有点奇怪,有人知道为什么吗?

根据打包机的工作方式,这在require中是不可能的。
打包在运行时之前进行一次,因此这些变量还没有值。

Normal node.js不使用打包程序或其他预处理构建工具的Javascript可以很好地处理发送到require的变量,因此这不是node.js中require的一般问题

但是,如果您使用的是像webPack这样的捆绑程序或类似的预处理构建工具,那么这些工具通常需要require的静态字符串,这样它们就可以分析依赖项,而无需实际运行代码

哦,顺便说一下,使用const module作为变量名是个坏主意,因为node.js已经在您的作用域中定义了module,如果您实际尝试运行该代码,该名称甚至会导致错误

例如,此代码在node.js中运行良好:

const mod = 'fs';
const fs = require(mod);

let data = fs.readFileSync("./file1.txt");
console.log(data);

我需要这样做是因为非常具体的原因所以。。。可能,如果它不工作,您会收到某种错误消息或行为,帮助您确定它不工作。@KevinB我刚刚找到了一个原因,之所以会这样,是因为在实际代码运行之前需要加载模块,所以所有的变量在那个时候都不存在。你使用的是像webPack之类的捆绑包吗。这些都需要静态字符串,以便在不实际运行代码的情况下分析依赖项。顺便说一句,如果您在原始问题中向我们展示了您的实际代码,我们可以帮助您解决打包问题。我从不理解为什么人们觉得需要编写代码来问一个一般性的问题,而不是向我们展示他们的实际代码。当我们看到真正的代码时,我们可以更有效地提供帮助。请考虑下一次这样做。“不使用打包器的普通No.jsJavaScript将在发送给需要的变量的情况下工作得很好。”不,不会的。我只想去掉代码中的大开关语句。@guseynismaylov-请给我们看看您的实际代码。另外,请说明您使用的是任何包装机还是捆绑机。我以前在require中使用过变量,如果在构建过程中没有其他事情会把它搞砸,那么它就可以正常工作。@GuseynIsmayylov-BTW,使用const module作为变量名是一个坏主意,因为模块已经在模块的范围内定义,并且能够用作其原始名称非常重要。@GuseynismayLov-我刚刚测试了答案中的示例代码,它在节点v10.16.0上运行得很好。因此,使用变量不是一个一般性的问题。