1

我正在Node.js中编写一个Web服务器,并且我希望它(包括其他内容)将单个JavaScript文件传递到包含我的客户端SDK的客户端。 SDK基本上是提供客户端可以使用的许多功能的对象。在运行时打包客户端脚本并支持Common.js

我需要建立从各种渠道SDK:

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

为了能够轻松测试我的自定义代码(#2),并且能够与服务器端共享此代码,如果我可以根据CommonJS编写它,那将是非常好的。

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

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

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

所以......我有些失落。有人能帮我澄清一下吗?我该如何将所有这些部分放在一起,才能最终得到一个可交付给客户端的交付物,并且客户端可以使用?

基本上,客户端应该结束了是全球许多物体,如$angular和我自己的custom的对象,但所有这一切只装载一个单一的文件。

我该怎么做?

PS:我不需要将结果放到服务器上的磁盘上,如果它是纯粹的内存中解决方案,对我来说是完全正确的(甚至是首选,因为那时我不需要写访问权限文件系统)。

回答

1

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

才能提供全局$angular和您的自定义对象,您可以使用script-loader,其典雅的运行给定的模块在全球范围内。

0

你在找什么叫做“资产管道”。你可以使用mincer(我没有尝试过,但看起来非常有希望)或asset-pipeline(肯定会做这项工作,但有点不赞成)。