如何使用browserify-shim正确地填充jquery / Backbone

时间:2014-06-22 16:59:08

标签: javascript browserify browserify-shim

我正在尝试构建一个使用backbone / jquery的独立JS库。这里有sample repo代表我正在尝试构建的库。

我对这个lib有几个目标:

  1. 不要暴露任何全局变量(即正确包裹所有东西以免泄漏)
  2. 不要受requireJS等任何其他包工具的影响
    • 此lib可以加载到任何其他网站,我不希望与可能存在的JS(我无法控制)之间发生任何冲突,例如requireJS
  3. 所以,我的理解是我可以使用browserify-shim来正确地填充这些模块,以便在browserify中使用require按预期使用它们。我非常确定当它包装这些模块时,垫片应该是undef definesrequire,这将达到目标#2。希望目标#1只需按预期使用browserify即可实现。

    我似乎无法将其付诸实践,而且我不确定它是否只是我对browserify-shim的误解。无论我是否从命令行运行browserify,我似乎都有同样的问题:browserify src/main.js -o build/main.js或使用gulp build。

    基本上,它似乎browserify-shim甚至没有运行。如果你打开index.html,你可以看到我加载的requirejs代码肯定影响我的lib,因为Backbone只是一个空对象,然后requirejs崩溃

    你可以在回购中看到我的package.json here,看起来大致如下:

    {
    ...
    "browserify-shim": {
        "./node_modules/jquery/dist/jquery.js": "$",
        "./node_modules/underscore.js": "_",
        "./node_modules/backbone.js": {
          "exports": "Backbone",
          "depends": [
            "./node_modules/underscore.js",
            "./node_modules/jquery/dist/jquery.js"
          ]
        }
      },
      "devDependencies": {
        "browserify": "^4.1.11",
        "browserify-shim": "^3.6.0",
        "gulp": "^3.8.1",
        "vinyl-source-stream": "^0.1.1"
      },
      "dependencies": {
        "backbone": "^1.1.2",
        "jquery": "^1.11.0",
        "underscore": "^1.6.0"
      }
    }
    

    不确定我在这里失踪了什么,但我没有运气。我想知道是否有人可以帮助或至少证实我尝试实现的目标是正确的,并且browserify-shim是可能的。

    感谢。

    修改

    为了说明它绝对不会模块化,我已经创建了完全相同的build/main.jsbuild/main-shimmed.js。我运行的main.js没有shim配置,并且shimmed的配置有上面的配置。我在这里明显遗漏了一些东西。

1 个答案:

答案 0 :(得分:0)

Browserify和Browserify-shim正在这种情况下工作,你的main.js正在调用正确的要求。

您遇到的问题是您正在捆绑的库也尝试连接AMD样式配置。你的“穿越溪流”,要小心Gozer。

要么获得没有AMD配置加载器的版本,要么将它们注释掉。