【问题标题】:How to bundle CommonJS modules into a single UMD library file?如何将 CommonJS 模块捆绑到单个 UMD 库文件中?
【发布时间】:2015-03-31 17:42:42
【问题描述】:

我正在编写一个 JS 库并将代码组织在与 require 调用相关的 CommonJS 模块的层次结构中。然后除此之外还有外部依赖(比如下划线)。

如何将我的所有库模块捆绑到一个文件 (CommonJS+AMD) 中,不包括应保留为 require 调用的外部依赖项?

我已经对 Browserify 进行了试验,并与 --standalone--external 接近,但是当在使用此捆绑库的应用程序上再次使用 Browserify 时,它会与捆绑库中剩余的 require 调用混淆。当我用 Derequire 之类的东西摆脱它们时,它还会去除对外部依赖项的 require 调用。

我试图弄清楚其他库是如何处理这个问题的,但它们似乎大多都有一些自定义连接脚本。有没有更简单的解决方案?似乎它应该是一个足够常见的用例。

【问题讨论】:

  • 你能用几个文件(在 GitHub 或 plnkr 或其他任何地方)创建一个最小的测试用例来展示你正在尝试做什么以及出了什么问题吗?另外,browserify是什么版本的?

标签: javascript browserify commonjs


【解决方案1】:

尝试您已经在使用独立和外部进行的操作,然后在您第二次捆绑时将 noParse 选项传递给 browserify(例如 browserify({noParse: ['/abs/path/to/first/bundle']}))。或者您可以尝试缩小第一个捆绑包。另见this answer

【讨论】:

  • 问题是(lib)的第一个捆绑应该只解决内部依赖关系,我不希望将一堆外部库放入我的库中。那么当整个app打包的时候,lib里面还有依赖需要解析。
  • 如果库和应用程序具有下划线作为外部依赖项,并且它们被单独且完全捆绑(解决所有需要调用),我最终会得到一个包含两次下划线代码的包。跨度>
  • 我对你想要做什么感到困惑。 “如果库和应用程序都将下划线作为外部依赖项......我最终会得到一个包含两次下划线代码的包。”不,您最终会得到一个包含零次下划线代码的包。您希望下划线来自哪里?它应该在任何一个捆绑包中吗?如果没有,你打算如何加载它?
  • 我希望在 App 上下文中解析下划线,即在第二次“捆绑”期间,由库的使用者解决。我只是想将我的库组件捆绑到典型的dist/singleFile.js 中,而不需要过多的外部依赖。或者这是常见的方法,将所有外部依赖项作为 dist 文件的一部分发送?
  • 你想要下划线的代码在第二个包中吗?
猜你喜欢
  • 2020-08-31
  • 1970-01-01
  • 2015-06-13
  • 2016-08-22
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多