2016-07-30 83 views
2

我試圖將angular2-moment庫引入到我的angular2項目中,但我似乎無法讓SystemJS合作。Angular2包括angular2-moment'require'不是函數'

<script src="lib/es6-shim.min.js"></script> 
<script src="lib/angular2-polyfills.js"></script> 
<script src="lib/traceur-runtime.js"></script> 
<script src="lib/system-csp-production.src.js"></script> 
<script src="lib/Reflect.js"></script> 

<script> 
    System.config({ 
    map: { 
     'angular2-moment': '/node_modules/angular2-moment', 
    }, 
    packages: { 
     '/node_modules/angular2-moment': { 
     'main': 'index' 
     } 
    } 
}); 
</script> 

<script src="lib/angular2.js"></script> 
<script src="lib/router.js"></script> 
<script src="lib/http.js"></script> 
<script src="lib/Rx.js"></script> 

<script> 
    System.import('app').catch(console.log.bind(console)); //loads my app 
</script> 

我的應用程序與此配置一樣正常工作,直到我嘗試從我的應用程序中的angular2-moment庫導入爲止。

import {TimeAgoPipe} from 'angular2-moment'; 

導致以下控制檯錯誤:

Uncaught TypeError: require is not a function 

Error: (SystemJS) http://website.dev/node_modules/angular2-moment/index.js did not call System.register or AMD define. If loading a global module configure the global name via the meta exports property for script injection support 

現在,乍一看,這看起來對我來說,SystemJS期待一個不同的模塊類型,但我試過的東西,如添加格式」 esm「或者」common「到軟件包配置無效。錯誤是正確的(模塊中沒有System.register,而是一個導出函數),但我不知道如何去修復它。

angular2矩的index.js看起來是這樣的:

function __export(m) { 
    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 
} 
__export(require('./CalendarPipe')); 
__export(require('./DateFormatPipe')); 
__export(require('./DurationPipe')); 
__export(require('./FromUnixPipe')); 
__export(require('./TimeAgoPipe')); 
//# sourceMappingURL=index.js.map 

在正確的方向的任何步驟,不勝感激!

+0

您的systemJS配置是正確的。我把它變成了一個[plunker](http://plnkr.co/edit/QcyPjTzXMzVCElB2eKWW?p=preview),通過angular2-moment的本地副本替換爲從angular2-moment github回購。 index.html是您配置SystemJS的唯一地方,還是您有單獨的config.js文件? –

+0

@MarkLanger我嘗試從Plunker的SystemJS配置(使用npmcdn源),並且我得到相同的錯誤。除了index.html中的配置外,我沒有任何配置。我可以在網絡標籤中看到正確加載了angular2-moment index.js,但仍然期待着不同的模塊格式。 –

回答

0

您嘗試訪問「angular2矩」使用「/ node_modules/angular2矩」,這似乎是不正確的包,

更新你的腳本配置如下圖所示,

<script> 
    System.config({ 
    map: { 'angular2-moment': '/node_modules/angular2-moment' }, 
    packages: { 
     'angular2-moment': { 'main': 'index' } 
    } 
}); 
</script> 

希望這有助於!

0

如果您克隆了angular2-moment,然後編譯它以使用您選擇的模塊類型,該怎麼辦?看起來它正在做一個commonjs,但你有來自節點的服務器端腳本。