是否有人有管理智能包的构建过程的经验,以便可以下载和提供外部文件?
例如,一个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
文件夹的智能包?
答案 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,这样做的事情会变得更容易和清晰。