【问题标题】:"moment" has no exported member 'default'“时刻”没有导出成员“默认”
【发布时间】:2019-07-12 23:36:48
【问题描述】:

我正在使用moment.js 更改我的应用程序的本地日期格式,但收到以下错误:

“moment”在导入库时没有导出成员'default'。

下面是我的代码:

import {Inject, Injectable, Optional} from '@angular/core';
import {DateAdapter, MAT_DATE_LOCALE, MatDateFormats} from '@angular/material';
import * as _moment from 'moment';
import {default as _rollupMoment, Moment} from 'moment';

const moment = _rollupMoment || _moment;

【问题讨论】:

  • 参考this
  • 时刻的版本?
  • @dileepkumarjami “时刻”:“^2.24.0”
  • 您是否尝试添加以上内容?
  • 在尝试@dileepkumarjami的建议后尝试重新运行您的项目,因为在您更改tsconfig.json时这是必要的

标签: angular typescript momentjs angular7 angular-moment


【解决方案1】:

tsconfig.json 文件中添加以下行:

"allowSyntheticDefaultImports": true

【讨论】:

    【解决方案2】:

    gulpfile.jsexternals 部分 添加 'moment/moment''moment' 两者

    externals: [
          'moment/moment',
           'moment'
       ]
    

    【讨论】:

      【解决方案3】:

      这里有一个完整的解决方案:

      第一:

       npm install moment --save
       npm install @angular/material-moment-adapter
      

      第二:

      在你的 package.json 中的依赖项下确保你有以下代码:

          "@angular/material-moment-adapter": "^8.2.3",
      

      第三:

      在编译器选项下的 tsconfig.json 文件中添加以下内容:

      "allowSyntheticDefaultImports": true
      

      第四:

      使用以下代码修改您的组件:

      import { MomentDateAdapter } from '@angular/material-moment-adapter';
      import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
      import * as _moment from 'moment';
      import { default as _rollupMoment } from 'moment';
      
      const moment = _rollupMoment || _moment;
      export const MY_FORMATS = {
      parse: {
        dateInput: 'LL',
      },
      display: {
        dateInput: 'YYYY-MM-DD',
        monthYearLabel: 'YYYY',
        dateA11yLabel: 'LL',
        monthYearA11yLabel: 'YYYY',
       },
      };
      
      @Component({
       selector: 'app-newsfeedform',
       templateUrl: './newsfeedform.component.html',
       styleUrls: ['./newsfeedform.component.css'],
       providers: [
        { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
      
        { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
      ],
      })
      

      第五:

      在您的 component.html 文件 datepicker 中,如下代码:

           <mat-form-field appearance="outline" fxFlex>
                          <input matInput [matDatepicker]="publishdate" placeholder="Publish Date"
                              formControlName="publishdate">
                          <mat-datepicker-toggle matSuffix [for]="publishdate"></mat-datepicker-toggle>
                          <mat-datepicker #publishdate></mat-datepicker>
                      </mat-form-field>
      

      也就是说,您可以自定义 Angular 材质日期选择器任何您想要的格式,只需修改上面给出的格式。

      【讨论】:

        【解决方案4】:

        尝试在“compilerOptions”下将"allowSyntheticDefaultImports": true 添加到您的tsconfig.json

        【讨论】:

        • 在 tsconfig 中添加是的,但是在 tsconfig 的哪个部分?根?编译器选项?库?
        • compilerOptions 部分
        • 添加到tsconfig.app.json 有效,而不是tsconfig.json
        【解决方案5】:

        您似乎无法导入 moment

        如您所见in the documentation, 对于 Typescript 2.x,请尝试在 compilerOptions 中添加 "moduleResolution": "node" tsconfig.json 文件,然后使用以下任何语法:

        import * as moment from 'moment';
        import moment = require('moment');
        

        PS:确保你已经安装了moment.jsnpm

        npm install --save moment
        

        【讨论】:

        • 我对“默认”这个词有疑问。
        猜你喜欢
        • 2019-02-17
        • 2016-10-06
        • 2018-10-19
        • 2017-01-29
        • 2018-12-22
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 2012-09-01
        相关资源
        最近更新 更多