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

Why can I not use a variable as parameter in the require() function of node.js (browserify)?

我试过类似的方法:

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

但是这样就找不到模块了,而:

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

很有魅力。想用生成的字符串列表加载模块,但我无法解决这个问题 atm。有什么想法吗?

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

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

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

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

这样一来,如果确实发现错误,您的代码也可以立即供其他需要追踪哪里出了问题的人使用。

您可以使用 .require() 添加您想要访问的文件,计算其路径而不是在构建时是静态的,这样这些模块将被包含并且稍后调用 require() 时它们会被发现。

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

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

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