为什么我不能在 node.js(浏览器化)的 require() 函数中使用变量作为参数

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

本文关键字:函数 变量 参数 require js node 浏览器 为什么 不能      更新时间:2023-09-26

我尝试了类似的东西:

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

但它无法再以这种方式找到模块,而

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

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

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

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

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

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

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

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

这样,您的代码也可以立即被其他需要跟踪哪里出错的人遍历,以防发现错误。

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

您可以使用

.require() 添加要访问的文件,计算其路径,而不是在构建时是静态的,这样将包含此模块,稍后调用require()时将找到它们。