如何通过 SystemJs 在 Angular2 中使用时刻时区

How to use moment-timezone in Angular2 via SystemJs

我通过 angular2-seed (which uses SystemJS) and trying to load moment-timezone 使用 Angular2 并专门使用 moment.tz.guess()

我通过以下方式导入:

import * as moment from 'moment-timezone';

执行此操作时,我的浏览器出现以下错误:

GET /node_modules/moment-timezone/data/packed/latest.json.js 404 (Not Found)

anuglar2-seed 使用 defaultJSExtensions,我认为这就是添加不正确 .js 的原因,所以我想我可以在 [=17= 中为 moment-timezone 关闭它] 像这样:

this.SYSTEM_BUILDER_CONFIG.packages['moment-timezone'] = {
  defaultExtension: false

//I have also tried:
      map: {
        '/node_modules/moment-timezone/data/packed/latest.json.js': '/node_modules/moment-timezone/data/packed/latest.json',
        '/node_modules/moment-timezone/data/packed/latest.json': '/node_modules/moment-timezone/data/packed/latest.json'
      }
};

但是,这不起作用。我做错了什么?

问题是,除非您告诉 SystemJS 您想要使用 moment-timezone-with-data-2010-2020.min.js 文件,否则它将默认加载 moment/index.js,这需要 tz 数据。

正确配置和使用的步骤如下:

npm install moment moment-timezone --savenpm install @types/moment @types/moment-timezone --save-dev

在我的组件中我做 import * as moment from 'moment-timezone';

configure SystemJS喜欢:

...
packages: {
      'moment-timezone': {
        main: 'builds/moment-timezone-with-data-2010-2020.min.js',
        defaultExtension: 'js'
      }
    }

然后您可以使用 console.log(moment.tz.guess());

对于 angular2-seed 你这样做:

project.config.ts:

...
 constructor() {

    this.NPM_DEPENDENCIES = [
      ...this.NPM_DEPENDENCIES,
      {src: 'moment', inject: 'libs'},
      {src: 'moment-timezone/builds/moment-timezone-with-data-2010-2020.min.js', inject: 'libs'},
    ];

...
    const mtzc = {
      main: 'builds/moment-timezone-with-data-2010-2020.min.js',
      defaultExtension: 'js'
    };

    this.SYSTEM_BUILDER_CONFIG.packages['moment-timezone'] = mtzc;
    this.SYSTEM_CONFIG_DEV.packages['moment-timezone'] = mtzc;
  }