当我尝试通过require加载模块时,无法通过在其中传递变量来做到这一点,只能在此处进行硬编码。
例如,这段代码可以工作:
const module = require('module')
但是以下代码却没有:
const moduleName = 'module'
const module = require(moduleName)
有点奇怪,有人知道为什么吗?
答案 0 :(得分:3)
普通的node.js Javascript(不使用打包程序或某些其他预处理构建工具)对于发送到require()
的变量也可以正常工作,因此这不是节点require()
的普遍问题.js。
但是,如果您使用的是诸如webPack的捆绑程序或类似的预处理构建工具,则这些工具通常需要require()
的静态字符串,以便它们可以分析依赖关系而无需实际运行您的代码。
哦,用const module
作为变量名是个坏主意,因为module
已经由node.js在您的作用域中定义,如果您实际尝试使用该名称,甚至会导致错误运行该代码。
作为示例,此代码在node.js中运行得很好:
const mod = 'fs';
const fs = require(mod);
let data = fs.readFileSync("./file1.txt");
console.log(data);
答案 1 :(得分:0)
根据打包程序的工作方式,require确实不可能做到这一点。 打包在运行时之前发生一次,因此这些变量还没有值。