2017-01-19 21 views
1

在我的項目中,我想使用SystemJS從cdnjs導入某個CodeMirror插件(xml-fold)。使用SystemJS,我如何映射CDN庫(CodeMirror)之間的URL?

但是,該插件通過../../lib/codemirror引用主要CodeMirror js。這被解析爲https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/lib/codemirror,這是不正確的 - 應該是https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/codemirror.js

我試圖map錯誤的URL到正確的,但它似乎並沒有被拾起 - 見下文(在瀏覽器控制檯錯誤):在控制檯

SystemJS.config({ 
 
    map: { 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/lib/codemirror': 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/codemirror.js' } 
 
}); 
 

 
// in actual project I import it through a dependency, but the problem is the same 
 
SystemJS.import('https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/addon/fold/xml-fold.js');
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.42/system.js"></script>

錯誤:

system.js:4 GET https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/lib/codemirror 403 

什麼是映射它的正確方法?

回答

1

有可能定義一個包在SystemJS配置codemirror和使用package-local map setting:

SystemJS.config({ 
    map: { 
     'codemirror': 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0' 
    }, 
    packages: { 
     'codemirror': { 
      map: {'./lib/codemirror': './codemirror.js'} 
     } 
    } 
}); 

重新映射lib/codemirrorcodemirror.js這個配置應該足以把這個進口

SystemJS.import('codemirror/addon/fold/xml-fold'); 

到這個網址

https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/addon/fold/xml-fold.js' 

然後,從它引用的相對路徑../../lib/codemirror將保留在同一個包中,並將重新映射到./codemirror.js。 (我目前的SystemJS選中的版本 - 0.19.42)

您可能還需要

main: 'codemirror.js' 

添加到codemirror包的配置才能夠codemirror本身導入爲

SystemJS.import('codemirror'); 

,如果你需要這樣做。

+0

謝謝,但它不只是一個擴展。 https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2.0/lib/codemirror.js不存在,它必須是https://cdnjs.cloudflare.com/ajax/libs/codemirror/4.2 .0/codemirror.js(沒有lib)。 –

+0

對不起,完全錯過了。我更新了答案。 – artem

+0

這看起來不錯,謝謝! –