Browserify:嵌套/条件要求

时间:2014-04-23 16:09:12

标签: javascript node.js commonjs browserify

在下面的CommonJS / Browserify模块中,我如何避免每次导入foobar - 而只是根据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;
    }
  }
};

2 个答案:

答案 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):

  • browserify的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;
    }
  }
};