为什么我不能将参数用于require函数作为变量

时间:2019-09-13 19:53:07

标签: node.js

当我尝试通过require加载模块时,无法通过在其中传递变量来做到这一点,只能在此处进行硬编码。

例如,这段代码可以工作:

const module = require('module')

但是以下代码却没有:

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

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

2 个答案:

答案 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确实不可能做到这一点。 打包在运行时之前发生一次,因此这些变量还没有值。