gpt4 book ai didi

javascript - 库依赖项中的匿名 Define() 模块会导致库依赖项损坏

转载 作者:行者123 更新时间:2023-12-03 10:30:16 26 4
gpt4 key购买 nike

我正在开发一个在许多 Web 应用程序中使用的库。该库本身不使用 RequireJS - 它是在 Node 中编写的,然后与 browserify 捆绑在一起 - 但是,它的一些依赖项正在使用 RequireJS shim 来包含该库。

我们发现,如果我们的库依赖于包含匿名定义模块的库(例如来自 lodash 的这个模块),则我们的依赖项使用的 RequireJS shim 会因“不匹配的匿名定义()”错误而中断来源:

// Define as an anonymous module so, through path mapping, it can be
// referenced as the "underscore" module.
define(function() {
return _;
});

我找到了 RequireJS documentation关于这个问题;但它的所有解决方案似乎都假设使用匿名模块导入库的库正在使用 RequireJS,但这里的情况并非如此。

我该如何处理这个问题,以便下游库不需要做任何特殊处理来需要我们的库?理想情况下,如果我们不必为每个使用匿名模块定义的库添加自定义逻辑,那就太好了。

最佳答案

您可以尝试使用 Browserify standalone 选项和 derequire 捆绑您的应用程序.

也许你用过derequire在 lodash 上,然后使用 standalone 选项捆绑您的应用程序。

以下内容来自Browserify documentation :

When opts.standalone is a non-empty string, a standalone module is created with that name and a umd wrapper. You can use namespaces in the standalone global export using a . in the string name as a separator. For example: 'A.B.C'

Note that in standalone mode the require() calls from the original source will still be around, which may trip up AMD loaders scanning for require() calls. You can remove these calls with derequire:

$ npm install -g derequire $ browserify main.js --standalone Foo |
derequire > bundle.js

opts.insertGlobalVars will be passed to insert-module-globals as the opts.vars parameter.

opts.externalRequireName defaults to 'require' in expose mode but you can use another name.

Note that if files do not contain javascript source code then you also need to specify a corresponding transform for them.

All other options are forwarded along to module-deps and browser-pack directly.

您还可以在 http://www.forbeslindesay.co.uk/post/46324645400/standalone-browserify-builds 找到有关独立选项的好教程。

关于javascript - 库依赖项中的匿名 Define() 模块会导致库依赖项损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29248881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com