web-dev-qa-db-ja.com

moment.jsモーメントは未定義です

Ember.jsアプリケーションで[email protected][email protected]に更新したところ、コンソールにmoment()を入力するか、スクリプトに含めると、瞬間が定義されていないというエラーが表示されます。

ドキュメントでは、「2.4.0以降、グローバルにエクスポートされたモーメントオブジェクトは非推奨になりました。」を見ました。これはここの問題だと思いますが、コードベースのmoment()へのすべての参照が現在壊れていないように、emberでグローバルにモーメントを設定する方法がわかりません。

Require( 'moment')を行っていた行をvar moment = require( 'moment')に更新しようとしましたが、結果は同じです。 var moment = ...行の直後にデバッガを配置し、コンソールにmoment()を入力しても、その瞬間は未定義です。

16
Efarley

新しいドキュメントの Browser セクションが必要です。

そう...

<script src="moment.js"></script>
<script>
    moment().format();
</script>

Edit

そうは言っても、これはおそらくあなたに同じ問題を与えるように見えます。

Moment.js は、グローバル変数で名前空間を汚さないために、パッケージマネージャーの使用を推奨しているようです。

CommonJS および [〜#〜] amd [〜#〜] を読んで、それを現在のスタックに組み込んでください。

次のようなことを行う必要があります。

var moment = require('moment');

moment().format();

ただし、requireを使用するには、前述のようなモジュールシステムが必要です。

しかし

明らかな修正は、新しい機能が必要ない限り、Moment.jsのバージョンをロールバックすることです。単純なtime/dateライブラリの更新はどれほど重要ですか?

14
shennan

これは、moment.jsの前に既にパッケージマネージャー/ローダーがある場合に発生します。

moment detects a package manager

その瞬間を検出することがわかります

  1. module.exports
  2. define.AMD

このようなものがない場合、global.momentが割り当てられます。

global変数は、実際にはwindowです。 factory変数は、モーメントスコープの閉鎖を表す以下のfunctionです。


2つの可能性:

a)CommonJS/SystemJS ...パッケージマネージャー/ローダーが<script src="/scripts/moment-with-locales.js">の前にないことを確認します

b) @ shennan's answer に従い、パッケージマネージャー/ローダーによって瞬間を読み込みます。 SystemJSを使用:

SystemJS.import('/scripts/moment-with-locales.js').then(function(moment) {
    moment.locale('fr');
});
0
Motlicek Petr