我正在尝试使用Meteor 1.6测试版通过chokidar(看门狗)动态加载多个模块,但是在对此事进行广泛研究后,我似乎无法让它工作。
从我收集的设计要求中,除了静态字符串之外,不会接受任何其他内容,即
require("test/string/here")
因为如果我尝试:
var path = "test/string/here"
require(path)
我刚收到错误:无法找到模块,即使字符串相同。
现在问题是我不确定如何继续这个,我真的被迫在使用流星时使用导入或静态字符串,还是有一些解决方法呢?
watchdog(cmddir, (dir) => {
match = "." + regex_cmd.exec(dir);
match = dir;
loader.emit("loadcommand", match)
});
loader.on('loadcommand', (file) => {
require(file);
});
答案 0 :(得分:0)
你所描述的内容有一些本质上的奇怪。
chokidar
用于观看实际文件和文件夹。
但Meteor编译并捆绑您的代码,导致构建后的app文件夹与您的项目结构完全不同。
虽然Meteor现在支持动态导入,但该机制是Meteor内部的,并不依赖于您的实际项目文件,而是依赖于Meteor构建的文件。
如果你想动态require
文件,比如Node,包括动态生成的模块路径,你应该避免import
和require
语句,这些语句会自动被Meteor内置替换进口机制。相反,你必须自己编写加载功能,注意你的app内置文件夹与你的项目文件夹不同。
例如,如果您的服务器正在静态位置观看文件和/或文件夹,这可能会起作用,这与您的应用运行的位置不同。
最后,我觉得这是一个XY问题:你没有首先描述你的目标,上面的问题是试图解决一个似乎不适合Meteor如何工作的奇怪解决方案,因此这可能不是你隐含目标的最合适的解决方案。
答案 1 :(得分:0)