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

我尝试了这样的:

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

但不能以这种方式find模块,而:

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

奇迹般有效。 想要加载生成的string列表的模块,但我不能包围我的头围绕这个问题atm。 有任何想法吗?

这是由于Browserify如何进行捆绑,因此只能对需求重新绑定进行静态string分析。 所以,如果你想做浏览器打包,你需要硬编码你的需求。

对于必须进入生产部署的代码(相对于快速原型,您很less打扰添加绑定),坚持静态需求总是明智的,部分原因在于捆绑,但也因为使用dynamicstring给你您的需求意味着您正在编写不可预测的代码,因此可能会充满您很less碰到的错误,而且极难debugging。

如果你需要根据不同的运行需要不同的需求(比如开发阶段testing与生产阶段testing),那么使用process.env或configuration对象通常是个好主意,这样当需要决定哪个库需要具体的目的,你可以使用类似的东西

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

这样,您的代码也可以立即通过,以便其他需要追踪哪里出错的地方,以防发现错误。

你可以使用.require()来添加你想要访问的文件,而不是在编译时静态计算它的path,这样这个模块就会被包含进来,并且在以后调用require()时候会被find。