SystemJS - 时刻不是函数

SystemJS - moment is not a function

我正在使用 JSPMAngularJSTypeScriptSystemJSES6,我的项目 运行 非常好。 .. 除非我尝试使用 momentJS。

这是我得到的错误:

TypeError: moment is not a function

这是部分代码:

import * as moment from 'moment';

更多:

var momentInstance = moment(value);

如果我调试它,moment 是一个对象而不是一个函数:

这是我的 moment.js JSPM 包的样子:

module.exports = require("npm:moment@2.11.0/moment.js");

我读了很多书,但找不到解决这个问题的方法...有什么想法吗?

我有一些东西 read/tried:

https://github.com/angular-ui/ui-calendar/issues/154

https://github.com/jkuri/ng2-datepicker/issues/5

https://github.com/dbushell/Pikaday/issues/153

谢谢!

只需从导入语句中删除分组 (* as):

import moment from 'moment';

无需深入研究 source code,看起来 moment 通常会导出一个函数,该函数具有各种方法和附加的其他属性。

通过使用 * as,您可以有效地获取所有这些属性并将它们附加到 new 对象,从而破坏原始函数。相反,您只需要主要导出(ES6 中的 export default,Node.js 中的 module.exports 对象)。

或者,您可以这样做

import moment, * as moments from 'moment';

获取矩函数 as moment,以及对象 moments 的所有其他属性。当将这样的 ES5 导出转换为 ES6 样式时,这没有多大意义,因为 moment 将保留相同的属性。

这对我有用:

import moment from 'moment/src/moment'

一个初学者 JS 错误给我同样的错误:

foobar(moment) {
  console.log(moment().whatever());
}

命名参数 moment 会中断对 moment() 函数的访问。

官方文档中的AS图momentJs我的问题通过nodeJS方法解决了:

var moment = require('moment');
moment(); //this does not emit the errors

如果你正在使用 ES6 和 babel,要将 moment work 作为一个函数,你必须以这种方式导入它:

import moment from 'moment'

而不是,如文档中所写

import * as moment from 'moment'