1

我正在用 Node.js 编写一个 Web 服务器,并且我希望它(除其他外)向包含我的客户端 SDK 的客户端提供一个 JavaScript 文件。SDK 基本上是一个对象,它提供了客户端可以使用的许多功能。

我需要从各种来源构建 SDK:

  • 第三方库,例如 AngularJS
  • 自定义代码,存储在.js服务器上的静态文件中
  • 自定义代码,在运行时在内存中动态创建

为了能够轻松测试我的自定义代码(#2),并且能够与服务器端共享此代码,如果我能根据 CommonJS 编写它会很棒。

我在为客户端捆绑东西方面没有太多经验,但我知道 UglifyJS 和 Browserify。

如果它只是连接一些文件(也许是缩小它们),我知道如何处理 UglifyJS。如果只是提供一些与 CommonJS 兼容的东西,我也知道如何使用 Browserify。我没有得到的是它们的组合,以及需求#3 - 动态生成的代码。

这实质上意味着我不能为此使用 Grunt,但一切都需要在运行时完成(请不要讨论我为什么要这样做)。

所以……我有点迷路了。有人可以帮我澄清一下吗?我如何将所有这些部分放在一起,以便最终得到一个可以发送给客户并且客户可以使用的可交付成果?

基本上,客户端最终应该得到的是一些全局对象,例如$,angular和我自己的custom对象,但所有这些都只加载一个文件。

我怎么能这样做?

PS:我不需要将结果放在服务器上的磁盘上,如果它是一个纯内存解决方案,对我来说非常好(甚至是首选,因为那时我不需要对文件系统的写访问权) .

4

2 回答 2

1

Imho webpack提供了您需要的所有功能。它是一个类似于 browserify 的打包工具,但我发现它更加灵活和可扩展。webpack 与不同的模块样式(CommonJS、AMD、ES6 或老式全局变量)无关,并且能够在模块上应用和链接预处理器。这些称为加载器(根据 CommonJS 规范),可用于动态生成代码。通常它们会将 LESS 转换为 CSS 或将 CSS 转换为 JavaScript,但它们可以用于任何动态任务。

要提供您的 global$angular您的自定义对象,您可以使用script-loader,它在全局上下文中经典地运行给定的模块。

于 2014-03-26T09:52:54.087 回答
0

您正在寻找的是所谓的“资产管道”。

您可以使用mincer(我没有尝试过,但它看起来很有希望)或资产管道(肯定会完成这项工作,但有点不推荐使用)。

于 2014-03-28T01:31:32.283 回答