2016-02-08 4 views
23

Я использую JSPM, AngularJS, TypeScript, SystemJS и ES6 и мой проект работает очень хорошо ... если я не пытаюсь использовать momentJS.SystemJS - момент не является функцией

Это ошибка, я получаю:

TypeError: moment is not a function

Это часть кода:

import * as moment from 'moment'; 

Подробнее:

var momentInstance = moment(value); 

Если я его отладки, момент объект не является функцией:

enter image description here

Это то, что мой moment.js JSPM пакет выглядит следующим образом:

module.exports = require("npm:[email protected]/moment.js"); 

Я много читал и не мог найти способ, чтобы решить эту проблему ... любые идеи?

Некоторые вещи, которые я прочитал/пробовал:

How to use momentjs in TypeScript with SystemJS?

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

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

Typescript module systems on momentJS behaving strangely

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

Спасибо!

+0

Кто вы делали свою инъекционную зависимость момента в угловом? – AlainIb

+0

@AlainIb привет, спасибо за ваш комментарий. Извините, но вы имеете в виду, почему? Если да, то что бы вы порекомендовали в качестве альтернативы? Еще раз спасибо. – eestein

ответ

43

Просто удалите группировку (* as) от вашего оператора импорта:

import moment from 'moment'; 

Без рыть слишком глубоко в source code, это выглядит как moment обычно экспортирует функцию, которая имеет все виды методов и других свойств прилагается к нему.

Используя * as, вы эффективно захватываете все эти свойства и прикрепляете их к объекту , разрушая исходную функцию. Вместо этого вы просто хотите экспортировать главный (export default в ES6, module.exports объект в Node.js).

В качестве альтернативы, вы можете сделать

import moment, * as moments from 'moment'; 

получить функции моментов , какmoment, и все остальные свойства на объекте под названием moments. Это немного снижает смысл при преобразовании экспорта ES5, как это, в стиль ES6, потому что moment сохранит те же свойства.

+1

Большое спасибо! ... Я не могу поверить, что это было только так, и что я не пробовал это раньше ... Спасибо! – eestein

+0

@eestein Cheers. Вот статья MDN в ['import'] (https://developer.mozilla.org/en/docs/web/javascript/reference/statements/import). На мой взгляд, это немного слишком кратковременно, но он охватывает большую часть синтаксиса. – Oka

+0

спасибо, что вы очень помогли :) теперь я пытаюсь решить некоторые проблемы, связанные с функцией tz, не доступной ... Еще раз спасибо! – eestein

Смежные вопросы