如何使用aurelia(jspm)中的加载程序插件拦截组件加载?

如何使用aurelia(jspm)中的加载程序插件拦截组件加载?,aurelia,jspm,aurelia-loader,Aurelia,Jspm,Aurelia Loader,我想拦截Aurelia的模块加载以重定向一些调用 为了完成这些事情,aurelia加载程序有一个addPlugin()接口。您可以添加一个后缀,如!myplugin添加到资源,以标记应使用该插件加载该资源 现在,当我使用自己的组件执行此操作时,它会加载JS文件,但HTML模板的名称会出错。就像我的公司的资源名称!myplugin它将加载my-comp.js,但尝试查找我的comp!myplugin.html,它与插件名称不再匹配 我在这里提供了这个问题的要点: main.js中的加载程序插件代码

我想拦截Aurelia的模块加载以重定向一些调用

为了完成这些事情,aurelia加载程序有一个
addPlugin()
接口。您可以添加一个后缀,如
!myplugin
添加到资源,以标记应使用该插件加载该资源

现在,当我使用自己的组件执行此操作时,它会加载JS文件,但HTML模板的名称会出错。就像我的公司的资源名称!myplugin它将加载my-comp.js,但尝试查找我的comp!myplugin.html,它与插件名称不再匹配

我在这里提供了这个问题的要点:

main.js中的加载程序插件代码基本上是:

loader.addPlugin('gate', {
  fetch(address) {
    console.info('Intercepted:', address);
    var tmpParts = address.split('.');
    var extension = tmpParts[tmpParts.length - 1].toLowerCase();
    if (extension == 'css') {
      console.debug('Loading as styles', address);
      return loader.loadText(address);
    } else if(extension == 'html') {
      console.debug('Loading as template:', address);
      return loader.loadTemplate(address);
    } else {
      console.debug('Loading as module:', address);
      return loader.loadModule(address);
    }
  }
});
在模板中这样使用它(在要点中标记为问题1):


在此之后,应可以按如下方式加载组件:

<comp2></comp2>
<compose view-model="./comp2!gate"></compose>

甚至像这样:

<comp2></comp2>
<compose view-model="./comp2!gate"></compose>

相反,该模板的名称被弄乱了,浏览器控制台显示:

加载资源失败:服务器响应状态为404()

模板的预期名称为
https://gist.host/run/1485182959149/comp2.html!gate
(包括插件)

如何修复加载程序插件以使其正常工作

加载程序是aurelia加载程序默认值1.0.0,JSPM为0.16.39,节点为6.5.0,NPM为3.10.5


我添加了第二个gist.run:

它稍微短一点。当我在
comp2.js
中使用
@useView
decorator(用问题4标记)指定视图时,它可以工作-但我无法使用
@useView
指定加载程序插件。我希望它使用相同的加载程序插件加载视图,或者能够使用
@useView
指定加载程序插件


好的,我找到了一个解决方案,看起来它可以用更少的代码和补丁工作,而且它可以在两个GIST之间工作

本要点包含外部组件
comp3

这是一个基本的Aurelia应用程序,带有一个插件和一个小补丁,用于加载程序的
ApplyPlugingTourl
方法:

如果基本URL是固定的,那么它应该适用于所有人。Aurelia应用程序从第一个要点加载comp3并显示它(您可以在comp3视图中看到紫色边框的定义)

目前有一个警告:SystemJS不支持CSS,因为SystemJS向其添加了扩展名
.js
,看起来我必须处理这个问题

我不喜欢loader.applyPluginToUrl的路径,但SystemJS并不真正支持插件链接,因此顺序必须正确。此外,此解决方案需要所有外部组件设置
@useView
,包括加载程序插件

有更好的方法吗