Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用browserify绑定依赖于外部库的UMD模块_Javascript_Node.js_Backbone.js_Browserify - Fatal编程技术网

Javascript 使用browserify绑定依赖于外部库的UMD模块

Javascript 使用browserify绑定依赖于外部库的UMD模块,javascript,node.js,backbone.js,browserify,Javascript,Node.js,Backbone.js,Browserify,我正在实现一个模块,该模块应该在NodeJS和浏览器(AMD/非AMD)环境中工作 它的简化版本如下所示: var-Backbone=require('Backbone'); module.exports=Backbone.Model.extend({…}); 但我不知道如何使它适用于所有环境 如果我使用全局主干(没有require),它将无法在NodeJS环境中工作 如果我使用require并从捆绑包中排除主干(使用--排除主干)-在非AMD浏览器中它将不工作(错误:找不到模块主干) 是

我正在实现一个模块,该模块应该在NodeJS和浏览器(AMD/非AMD)环境中工作

它的简化版本如下所示:

var-Backbone=require('Backbone');
module.exports=Backbone.Model.extend({…});
但我不知道如何使它适用于所有环境

  • 如果我使用全局主干(没有
    require
    ),它将无法在NodeJS环境中工作
  • 如果我使用require并从捆绑包中排除主干(使用
    --排除主干
    )-在非AMD浏览器中它将不工作(错误:找不到模块
    主干
是否可以生成UMD模块,该模块将:

  • 在浏览器(AMD)/NodeJS环境中使用
    require('backbone')
  • 浏览器中的window.Backbone
    (非AMD)

umd软件包为在非AMD、AMD或CommonJS环境中工作的jQuery插件提供了一种模式。示例是jquery,但是 您可以将它调整为您自己的名称空间模块,而不是jquery

我过去处理这个问题的一种方法是使用
require('namespace')
为插件构建独立的bundle,但是使用一个遵循上面链接的模式的存根来代替真正的模块

bundle
  .require('./namespace-stub', {expose: 'namespace'})
  .require('plugin', {entry: true});
其中,
namespace stub.js
是一个遵循上面链接的模式的小模块,但它不调用带有名称空间(取自AMD、CommonJS或globals)的函数,只需将其导出即可

换句话说,您可以通过替换一个模块来代替主库包来构建插件的独立捆绑包,而主库包实际上只是从任何地方查找和发现真正的库