为Browserify定义全局变量
  我使用SpineJS(它导出一个commonjs模块),它需要在全球范围内使用,因为我在任何地方都使用它,但是似乎我必须对每个使用Spine的文件进行Spine = require('spine')工作。 
  有没有什么方法可以定义Spine一次,使其全球可用? 
PS:我使用Spine作为例子,但是我一般都想知道如何在任何其他库上做到这一点。
  在每个文件中写入Spine = require('spine')是正确的方法。 
  然而,通过使用global或window对象(browserify将global对象设置为window ,这是全局名称空间)有几种可能性: 
global.Spine = module.exports global.Spine = require('spine')捆绑的任何其他.js文件中: global.Spine = require('spine') window.Spine = require('spine') 首先,以你为例,大卫是正确的。 在你需要的每个模块中包含所有的依赖关系。它非常冗长,但没有编译时间的魔法,缓解了各种反模式和潜在的未来问题。
真正的答案。
  这并不总是实际的。  Browserify接受一个名为insertGlobalVars的选项。  在构建过程中,将扫描每个流式文件以找到与提供的键名相匹配的标识符,并将该模块封装在包含参数的IIFE中,这些参数用于解析未在模块内分配的每个标识符。  这一切都发生在依赖树最终完成之前,这允许您使用require来解析依赖关系。 
TLDR
  在Browserify中使用insertGlobalVars选项。 
browserify({
  insertGlobalVars: {
    spine: function(file, dir) {
      return 'require("spine")';
    }
  }
});
  对于每个扫描的文件,如果存在未分配的标识符spine ,则按照require("spine")解析。 
