web-dev-qa-db-ja.com

SystemJS-モーメントは機能ではありません

私はJSPMAngularJSTypeScriptSystemJS、およびES6を使用していますが、私のプロジェクトはかなりうまく実行されています... momentJSを使用します。

これは私が得るエラーです:

TypeError:モーメントは関数ではありません

これはコードの一部です:

import * as moment from 'moment';

もっと:

var momentInstance = moment(value);

デバッグすると、モーメントは関数ではなくオブジェクトです。

enter image description here

これは、私のmoment.js JSPMパッケージの外観です。

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

私はたくさん読んで、これを解決する方法を見つけることができませんでした...アイデアはありますか?

私が読んだ/試したもの:

SystemJSでTypeScriptでmomentjsを使用する方法?

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

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

momentJSのTypeScriptモジュールシステムの動作がおかしい

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

ありがとう!

30
eestein

Importステートメントからグループ化(* as)を削除するだけです:

import moment from 'moment';

ソースコード を深く掘り下げることなく、momentは通常、あらゆる種類のメソッドやその他のプロパティが関連付けられた関数をエクスポートするように見えます。

* asを使用すると、これらすべてのプロパティを効果的に取得してnewオブジェクトにアタッチし、元の関数を破棄します。代わりに、チーフエクスポート(ES6ではexport default、Node.jsではmodule.exportsオブジェクト)のみが必要です。

あるいは、あなたはすることができます

import moment, * as moments from 'moment';

モーメント関数asmoment、およびmomentsと呼ばれるオブジェクトの他のすべてのプロパティを取得します。 momentは同じプロパティを保持するため、このようなES5エクスポートをES6スタイルに変換する場合、これは少し意味がありません。

56
Oka

これは私のために働いた:

import moment from 'moment/src/moment'
2
S. Bleier

私に同じエラーを与えていた初心者のJSの間違い:

_foobar(moment) {
  console.log(moment().whatever());
}
_

パラメーターにmomentという名前を付けると、moment()関数へのアクセスが中断されます。

0
Patrick

私は次のコード形式を持っていて、同様のエラーが発生しました。

   export const input = {
   year: moment().year()
   };
   class EventExplorer extends Component {
     state = {};
     // rest of the code 
   }

次に示すように、入力オブジェクトEventExplorerクラス内に移動しました

class EventExplorer extends Component {
 state = {};
 input = {
   year: moment().year()
 };
  // rest of the code 
}`
0