Packaging a js library for AMD, CommonJS and more
当打包需要与AMD、CommonJS或全局一起使用的JavaScript库时,通常使用如下定义:
1 2 3 4 5 6 7 8 9 | (function(name, definition) { if (typeof module != 'undefined') module.exports = definition(); else if (typeof define == 'function' && typeof define.amd == 'object') define(definition); else this[name] = definition(); }('mod', function() { //Here goes the code you would normally have inside define() or add to module.exports return MyModule }; })); |
假设您的库只包含一个文件,而没有外部依赖项,这就很好地工作了。我不知道在发布一个由各种相互依赖的模块(可能具有外部依赖性)组成的库时该怎么做。
即使我只想支持AMD(AMD+Bower是我的主要用例,也就是我自己使用库的方式),我也不确定该怎么做。假设我的库发布模块
1 2 3 4 5 6 7 8 | // mylib/foo.js define(['external'], function(external) { // whatever }); // mylib/bar.js define(['./foo', 'external'], function(foo, external) { // whatever }); |
号
不过,我不能保证我的客户能够正确解决"外部"问题。为了实现这一点,客户机需要在其RequireJS定义中显式地添加
What is the correct way to handle dependencies in a library, especially considering the possibility of supporting multiple module standards?
号
我将使用r.js将模块合并到一个文件中(当然,只有内部依赖项)。
我不确定我是否正确理解了您的问题,但是合并到一个文件中的几个模块可以解决您的问题。
您关注的是这个问题,RequireJS文档已经发布了一个示例:http://requireJS.org/docs/node.html
编辑:看看jquery.js的尾部-他们处理过这样的方法:https://gist.github.com/er1z/7721573