为Browserify定义全局变量

我使用SpineJS(它导出一个commonjs模块),它需要在全球范围内使用,因为我在任何地方都使用它,但是似乎我必须对每个使用Spine的文件进行Spine = require('spine')工作。

有没有什么方法可以定义Spine一次,使其全球可用?

PS:我使用Spine作为例子,但是我一般都想知道如何在任何其他库上做到这一点。


在每个文件中写入Spine = require('spine')是正确的方法。

然而,通过使用globalwindow对象(browserify将global对象设置为window ,这是全局名称空间)有几种可能性:

  • 在spine.js中: global.Spine = module.exports
  • 在由global.Spine = require('spine')捆绑的任何其他.js文件中: global.Spine = require('spine')
  • 在脚本标记或.html文件引用的.js文件中,位于spine.js文件后面:window.Spine window.Spine = require('spine')

  • 首先,以你为例,大卫是正确的。 在你需要的每个模块中包含所有的依赖关系。它非常冗长,但没有编译时间的魔法,缓解了各种反模式和潜在的未来问题。

    真正的答案。

    这并不总是实际的。 Browserify接受一个名为insertGlobalVars的选项。 在构建过程中,将扫描每个流式文件以找到与提供的键名相匹配的标识符,并将该模块封装在包含参数的IIFE中,这些参数用于解析未在模块内分配的每个标识符。 这一切都发生在依赖树最终完成之前,这允许您使用require来解析依赖关系。

    TLDR

    在Browserify中使用insertGlobalVars选项。

    browserify({
      insertGlobalVars: {
        spine: function(file, dir) {
          return 'require("spine")';
        }
      }
    });
    

    对于每个扫描的文件,如果存在未分配的标识符spine ,则按照require("spine")解析。

    链接地址: http://www.djcxy.com/p/32885.html

    上一篇: Defining global variable for Browserify

    下一篇: SQL Server MERGE command duplicate pk error