1

我正在尝试构建一个使用主干/jquery 的独立 JS 库。这是一个代表我正在尝试构建的库的示例存储库。

我对这个库有几个目标:

  1. 不要暴露任何全局变量(即正确包装所有内容,以免泄漏)
  2. 不受 requireJS 等任何其他打包工具的影响
    • 这个库可以加载到任何其他网站,我不希望与可能存在的 JS 发生任何冲突(这超出了我的控制范围),例如 requireJS

因此,我的理解是,我可以使用 browserify-shim 正确填充这些模块,以便它们可以require在 browserify 中按预期使用。我很确定 shim 应该取消定义defines,并且require当它包装这些模块时,这将实现目标 #2。目标 #1 有望通过按预期使用 browserify 来实现。

我似乎真的无法让它工作,我不确定这是否只是我对 browserify-shim 的误解。无论我是否从命令行运行 browserify,我似乎都有同样的问题:browserify src/main.js -o build/main.js或使用 gulp 构建.

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

你可以在 repo 中看到我的 package.json ,它看起来大致是这样的:

{
...
"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.

谢谢。

编辑

为了说明它绝对不是对模块进行填充,我创建了完全相同的abuild/main.js和 a 。build/main-shimmed.js我运行的 main.js 没有 shim 配置,而 shimed 有上述配置。我显然在这里遗漏了一些东西。

4

1 回答 1

0

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

您遇到的问题是您捆绑的库也试图连接 AMD 样式配置。你的“过河”,当心戈泽尔。

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

于 2014-06-23T06:38:11.630 回答