問題の説明と再現手順:
typescriptプロジェクトにインスタンスロケールを実装しようとしています
https://momentjs.com/docs/#/i18n/instance -locale /
しかし、 import moment from 'moment'
を実行すると、エラーが発生します。
moment has no default export
目的:
アプリケーションの一部で人間化された文字列のカスタムフォーム(短縮、「秒」ではなく「秒」など)が必要なので、1つのビューで2つのロケールを使用したいと思います。
環境:
typescriptプロジェクト
役立つ可能性のあるその他の情報:
TypeScript、Angular4
問題を報告している場合は、使用している環境で次のコードを実行し、出力を含めてください。
console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)
Tue Jan 09 2018 15:46:46 GMT+0100 (CET)
VM12667:2 09/01/2018, 15:46:46
VM12667:3 -60
VM12667:4 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
VM12667:5 Uncaught ReferenceError: moment is not defined
at <anonymous>:5:13
md5-1f8dcc13f1f8244065e29a6dcf5a9efa
import * as moment from 'moment';
console.log('version', moment.version);
md5-1f8dcc13f1f8244065e29a6dcf5a9efa
version 2.20.1
import * as moment from 'moment';
ソリューションは、バンドルで3回の揺れをブロックするため、防止したいと思います。
どうもありがとう! :)
RTFM😂
Note: If you have trouble importing moment, try adding
"allowSyntheticDefaultImports": true in compilerOptions
in your tsconfig.json file and then use the syntax
https://momentjs.com/docs/#/use -it / typescript /
allowSyntheticDefaultImport
が不要になる方法でこれが解決される可能性はありますか? それを要求することの問題は、モーメントを使用するすべての人がこの設定もオンにする必要があるということです。
この設定を必要としないことで、 moment
をallowSyntheticDefaultImport
に独自の設定を持つプロジェクトで簡単に使用できるようになりますが、この設定は事実上すべての人に強制されます。
これが本当に、本当に、不快な問題であるとここでただチャイムを鳴らします。 公式仕様を尊重しないことを選択した瞬間なので、一部のライブラリはimport * as moment from "moment"
を介してプルインし、他のライブラリはimport defaultMoment from "moment"
介して実行することを意味します。 そのため、プロジェクトが両方を読み込もうとすると、ロールアップを取得して適切にコンパイルするための適切な設定を取得できません。 allowSyntheticDefaultImports : true
、 esModuleInterop : true
、 moduleResolution : "node"
、 skipLibCheck : true
ほぼすべての順列と組み合わせを試しましたが、正しく機能する順列を取得できません。 1つのソリューションでは、1つのインポート形式の1つのライブラリが機能しますが、他のソリューションでは失敗します。
スペックが存在するのには理由があり、それは一貫性を生み出すためです。 その瞬間にmoment-esバリアントまたは適切にインポートできるものを含める方法はありません。そのため、仕様に準拠したい人は仕様に準拠するだけで、JSツールチェーンがすべてではなく期待どおりに機能するようになります。ハック?
+1
最も参考になるコメント
RTFM😂
https://momentjs.com/docs/#/use -it / typescript /