在运行时打包客户端脚本,并支持Common.js

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

我需要从各种来源构buildSDK:

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

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

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

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

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

所以…我有点失落 有人能帮我澄清一下吗? 我怎样才能把所有这些东西放在一起,这样我才最终得到一个可以发送给客户端的交付物,客户端可以使用它?

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

我怎么能这样做?

PS:我不需要将结果放到服务器上的磁盘上,如果这是一个纯粹的内存解决scheme,对我来说是完全正确的(甚至是首选,因为我不需要对文件系统进行写访问) 。

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

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

你在找什么叫做“资产pipe道”。

你可以使用mincer (我没有尝试,但它看起来非常有前途)或资产pipe道 (肯定会做的工作,但有点不赞成)。