Meteor:在构建过程中下载文件

时间:2013-11-20 19:59:07

标签: build download meteor

是否有人有管理智能包的构建过程的经验,以便可以下载和提供外部文件?

例如,一个meteor智能包在构建应用程序时包装了一个javascript库curl库,并直接从服务器提供它。这对于jquery-ui,Ace编辑器等等很有用。

具体来说,我问的是使用Package._transitional_registerBuildPlugin的正确方法,这是在0.6.5中引入的。任何例子都会很棒。

Grepping Meteor代码只会显示添加源处理程序的内容,因此对于决定下载文件的操作不是很有帮助。

./packages/templating/package.js:Package._transitional_registerBuildPlugin({
./packages/stylus/package.js:Package._transitional_registerBuildPlugin({
./packages/meteor/package.js:Package._transitional_registerBuildPlugin({
./packages/coffeescript/package.js:Package._transitional_registerBuildPlugin({
./packages/less/package.js:Package._transitional_registerBuildPlugin({

一个相关的问题:什么是允许写入自己的.build文件夹的智能包?

2 个答案:

答案 0 :(得分:0)

我知道这不是你问题的答案,但我无法抗拒发表这个想法:)

我想到的最简单的事情就是按照你的建议使用curl实现一个简单的“代理”服务器。它可能或多或少像:

var spawn = Npm.require('child_process').spawn;

WebApp.connectHandlers.stack.splice (0, 0, {
  route: '/jquery.js',
  handle: function(req, res, next) {
    spawn('curl', [
        'https://code.jquery.com/jquery-1.10.2.min.js'
      ]).stdout.pipe(res);
    res.writeHead(200, {
      'Content-Type': 'text/javascript'
    });
  },
});

尽管如此,它仍然无法解决 - 开箱即用 - 控制负载顺序的问题。

修改

如果您不想每次在用户请求文件时调用curl,您可以随时将其缓存在服务器上的某个位置,对吗?此外,此技术允许您按需加载其他库,因此只有在实际需要时才会这样。注意,像 ace编辑器这样的东西可能非常重。

答案 1 :(得分:0)

我最终将其作为build plugin as part of my ShareJS smart package来实现..这不是最漂亮的事情,而是做它需要做的事情。我的方法是推出一个通用的智能包,用于处理Meteor包中的CDN下载。

我希望通过更好地记录构建API,这样做的事情会变得更容易和清晰。