Я только что установил пакет:
npm install moment-timezone --save
И в угловом компоненте я использую его так:
import * as moment from 'moment-timezone';
moment().tz('America/New York');
Я предполагаю, что это добавляет все данные часового пояса (900+ КБ) в пакет поставщиков и замедляет запуск приложения.
Как загрузить его асинхронно, только по запросу?
Я бы очень хотел использовать решение NPM, чтобы база данных обновлялась автоматически при обновлении пакетов npm. Никто никогда не забудет обновить базу данных часовых поясов вручную.
Редактировать:
Ответ @Dimanoid показывает, как импортировать момент времени из 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); }); } }
moment.tz.load()
. momentjs.com/timezone/docs/#/data -loading/loading-a-data-bundle PS. Но я думаю, что перенести ваш компонент с moment-tz в отдельный модуль и использовать ленивую загрузку будет проще и эффективнее... - person Dimanoid   schedule 10.05.2019