وصف المشكلة وخطوات إعادة الإنتاج:
محاولة تنفيذ لغة المثيل في مشروع مطبوع
https://momentjs.com/docs/#/i18n/instance -locale /
لكن عندما أحصل على خطأ عند import moment from 'moment'
:
moment has no default export
غرض:
أحتاج إلى نماذج مخصصة (اختصار ، مثل "ثانية" بدلاً من "ثوانٍ") من السلاسل المتوافقة مع البشر في بعض أجزاء التطبيق ، لذلك أود استخدام لغتين محليتين في عرض واحد.
بيئة:
مشروع مطبوع
معلومات أخرى قد تكون مفيدة:
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';
لأنه يمنع ثلاثة اهتزازات في التجميع
تشكرات! :)
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
ولا يمكنني الحصول على تبديل يعمل بشكل صحيح. سيسمح أحد الحلول لمكتبة واحدة ذات تنسيق استيراد واحد بالعمل ، لكنها تفشل في الأخرى.
هناك سبب لوجود المواصفات ، وهذا لخلق التناسق. ألا توجد طريقة يمكن أن تحتوي على متغير لحظة أو شيء يمكن استيراده بشكل صحيح ، وبهذه الطريقة يمكن للأشخاص الذين يرغبون في اتباع المواصفات اتباع المواصفات فقط ، مما يسمح لسلسلة أدوات JS بالعمل كما هو متوقع ، بدلاً من كل الخارقة؟
+1
التعليق الأكثر فائدة
RTFM 😂
https://momentjs.com/docs/#/use -it / typescript /