2016-07-30 85 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,但你有来自节点的服务器端脚本。