为什么我不能在 node.js (browserify) 的 require() 函数中使用变量作为参数?

IT技术 javascript node.js reactjs browserify
2021-05-24 16:16:10

我试过类似的东西:

var path = '../right/here';
var module = require(path);

但它无法再通过这种方式找到module,而:

var module = require('../right/here');

奇迹般有效。想使用生成的字符串列表加载module,但我无法解决这个问题 atm。有任何想法吗?

4个回答

您可以使用模板动态获取文件。

var myModule = 'Module1';
var Modules = require(`../path/${myModule}`)

这是由于 Browserify 是如何进行捆绑的,它只能对需求重新绑定进行静态字符串分析。因此,如果您想进行 browserify 捆绑,则需要对您的要求进行硬编码。

对于必须进入生产部署的代码(与快速原型相反,您很少费心为其添加捆绑)始终建议坚持静态需求,部分原因是捆绑,但也因为使用动态字符串为您提供您的要求意味着您正在编写不可预测的代码,因此可能充满了您很少遇到且极难调试的错误。

如果您需要基于不同运行的不同要求(例如,开发与阶段测试与生产),那么使用process.env或 配置对象通常是一个好主意,以便在决定为特定目的需要哪个库时,你可以使用类似的东西

var knox = config.offline ? require("./util/mocks3") : require("knox");

这样一来,您的代码也可以立即被其他需要追踪出错位置的人遍历,以防确实发现了错误。

require('@/path/'.concat(fileName))

您可以使用.require()添加要访问的文件,计算其路径而不是在构建时保持静态,这样这些module将被包含在内,并且require()稍后调用时将被找到。