如何通过SystemJs在Angular2中使用moment-timezone

ryn*_*nop 5 javascript momentjs systemjs angular

我通过angular2-seed(使用SystemJS)使用Angular2并尝试加载时刻 - 时区moment.tz.guess()专门使用.

我导入:

import * as moment from 'moment-timezone';
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我在浏览器中收到以下错误:

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

anuglar2种子的用途defaultJSExtensions我想这是为什么不正确的.js被加入,所以我想我可能只是将其关闭了moment-timezonetools/config/project.config.ts像这样:

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'
      }
};
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我究竟做错了什么?

ryn*_*nop 9

问题是,除非你告诉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';.

配置SystemJS如:

...
packages: {
      'moment-timezone': {
        main: 'builds/moment-timezone-with-data-2010-2020.min.js',
        defaultExtension: 'js'
      }
    }
Run Code Online (Sandbox Code Playgroud)

然后你可以使用 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;
  }
Run Code Online (Sandbox Code Playgroud)