【问题标题】:Meteor: downloading files during build processMeteor:在构建过程中下载文件
【发布时间】:2013-12-05 00:33:51
【问题描述】:

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

例如,一个封装了javascript库的meteor智能包可以在构建应用程序时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文件夹的智能包?

【问题讨论】:

  • 你能不能只使用一个 git 子模块并使用常规的api.add_files 调用添加文件?
  • 你能解释一下为什么你需要它作为构建过程的一部分吗?您总是可以通过简单的AJAX 请求按需动态加载 javascript 代码,那么这个策略有什么问题呢?
  • @apendua 因为我希望 Meteor 服务器将文件提供给每个客户端,而不是外部 CDN,这也允许我控制加载顺序。

标签: build download meteor


【解决方案1】:

我知道这不完全是您问题的答案,但我忍不住发布了这个想法:)

我想到的最简单的事情是按照您的建议使用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 编辑器 之类的东西可能非常繁重。

【讨论】:

  • 嗨@apendua,与要求客户端直接检索文件相比,这样做有什么意义?我想在构建过程中检索一次文件,然后以正确的顺序将它与其他包一起提供给客户端。
【解决方案2】:

我最终将其实现为build plugin as part of my ShareJS smart package.. 这不是最漂亮的事情,但它做了它需要做的事情。我的方法是使用通用智能包来处理从 Meteor 包下载的 CDN。

我希望随着构建 API 文档的完善,执行此类操作的路径将变得更加容易和清晰。

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 2019-10-25
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多