在下面的CommonJS / Browserify模块中,我如何避免每次导入foo
和bar
- 而只是根据init()
中的条件导入所需的一个?
var Foo = require('foo'),
Bar = require('bar'),
Component = function(config) {
this.type = config.type;
this.init();
};
Component.prototype = {
init: function() {
var instance = null;
switch (this.type) {
case ('foo'):
instance = new Foo(...);
break;
case ('bar'):
instance = new Bar(...);
break;
}
}
};
答案 0 :(得分:12)
如果你来到这里(像我一样),因为有些模块你想要从包中排除,具体取决于代码中的条件,例如:
// I want browserify to ignore `nodeOnlyModule` because it
// can't be browserified (for example if it uses native extensions, etc ...)
var isBrowser = typeof window === 'undefined'
if (!isBrowser) var nodeOnlyModule = require('nodeOnlyModule')
有不同的选项(见the docs):
ignore
选项只会替换您不希望通过空存根捆绑的模块,而是捆绑该exclude
将完全排除该模块,如果您尝试导入,则您的代码会抛出“未找到”错误。browser
文件中的package.json
字段。通过这种方式,您可以提供要导入的文件的映射,实际上是在浏览时覆盖节点的模块解析算法。答案 1 :(得分:5)
Component = function(config) {
this.type = config.type;
this.init();
};
Component.prototype = {
init: function() {
var instance = null;
switch (this.type) {
case ('foo'):
instance = new (require('foo'))(...);
break;
case ('bar'):
instance = new (require('bar'))(...);
break;
}
}
};