我刚刚安装了这个包:
npm install moment-timezone --save
在角度组件中,我像这样使用它:
import * as moment from 'moment-timezone';
moment().tz('America/New York');
我猜这会将所有时区数据 (900+kB) 添加到供应商捆绑包中并减慢应用程序的启动速度。
如何仅按需异步加载它?
我真的很想使用 NPM 解决方案,以便在更新 npm 包时自动更新数据库。没有人会记得手动更新时区数据库。
编辑:
@Dimanoid 的回答显示了如何在没有数据的情况下从 npm 导入时刻时区:
import * as moment from 'moment-timezone/moment-timezone';
以下是如何将数据包含为延迟加载的资产:
修改 angular.json -> 项目 -> yourprojects -> 架构师 -> 构建 -> 选项:
"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); }); } }