如何今天打包客户端Javascript库?

时间:2013-05-18 04:21:37

标签: javascript module package commonjs js-amd

我一直在追赶现代客户端JS生态系统,并阅读CommonJS和AMD等模块系统(包括相关工具 - browserify,requirejs,onejs,jam,以及其他几十种)。如果我正在编写一个Javascript库,我该如何打包它,以便它可以最广泛地访问(理想情况下,由发布CommonJS,AMD,特别是那些都没有的用户)?

像jQuery这样的流行库似乎只是使用旧式文件串联来构建自身并动态检测它是应该写入导出还是全局上下文。我目前正在做同样的事情,但主要的缺点是如果我(不像jQuery)依赖于几个库,那么不必要求用户手动预先包含传递集是很好的。 (虽然我目前只有两个依赖项。)当然还有全局命名空间污染。

或者,为每个上下文生成我的库的多个版本可能是最干净的吗?

这也会影响包装和出版。有几个系统,但我相信主要的一个是凉亭,这很容易处理,因为它所做的一切都是获取。但是,如果我想将其打包为组件,则需要CommonJS模块。

我应该注意其他相关方面吗?所有这些都有适当的示例项目吗?

1 个答案:

答案 0 :(得分:3)

我一直在考虑这个问题,我得出了几个结论:

  1. 创建可在全局和AMD设置中使用的框架的一个版本
  2. 不要过于不得不要求您的客户手动包含依赖项,这是一项一项一项的活动,无论如何 ,无论您提供AMD打包还是全局 - 范围框架(无论如何都必须调整第三方家属的安置,就是我所说的)
  3. 我使用Grunt进行项目建设/包装/测试/ linting /无论如何,所以对于所有其他包装替代品我都有不同的任务。
  4. 因此,简而言之,首先为“旧学校/ AMD”打造“晚年”包装。

    P.S。

    我也坚信,您的包装和交付流程/需求不应(尽可能)决定您的架构和开发决策

    我尝试构建最可自定义,模块化且可用的代码,同时使用我选择的打包范例,然后我考虑替代打包。如果我在第一部分中成功,第二部分通常要么是直接的,要么需要很少的代码库更改(因为第一步中的模块化和适当的原则应用)。