Я только что установил пакет:
npm install moment-timezone --save
И в угловом компоненте я использую это так:
import * as moment from 'moment-timezone';
moment().tz('America/New York');
Я полагаю, что это добавляет все данные о часовых поясах (900 + кБ) к комплекту поставщиков и замедляет запуск приложений.
Как загрузить его асинхронно, только по требованию?
Мне бы очень хотелось использовать решение NPM, чтобы база данных автоматически обновлялась при обновлении пакетов npm. Никто не помнит, чтобы обновить базу данных часовых поясов вручную.
Edit:
@ Ответ Диманоида показывает, как импортировать момент-часовой пояс из npm без данных:
import * as moment from 'moment-timezone/moment-timezone';
А вот как вы можете включить данные в ленивый загруженный ресурс:
Изменение angular.json -> проекты -> ваши проекты -> архитектор -> сборка -> опции:
"assets": [
"src/favicon.ico",
"src/assets/i18n",
{ //add this
"glob": "latest.json",
"input": "node_modules/moment-timezone/data/packed",
"output": "assets/moment-timezone"
}
]
запросить его по требованию из папки активов:
import * as moment from 'moment-timezone/moment-timezone';
import { PlatformLocation } from '@angular/common';
export class MyComponent implements OnInit {
constructor(private platformLocation: PlatformLocation) {
}
ngOnInit(){
//you can use @angular/http instead of fetch
fetch(this.platformLocation.getBaseHrefFromDOM() + 'assets/moment-timezone/latest.json')
.then(time => time.json())
.then(timeZoneData => {
moment.tz.load(timeZoneData);
});
}
}