typescript - Använda Rollup för Angular 2:s AoT-kompilator och importera Moment.js


Jag försöker följa den officiella AoT-guiden för Angular 2, och jag använder Moment.js i min applikation. Moment.js finns i min packages.json-fil, och jag använder version 2.15.0. Hittills har jag importerat det på detta sätt:

import * as moment from 'moment';

Men när jag kommer till delen där jag måste köra rollup, slutar jag med följande fel:

Kan inte anropa ett namnrum ('moment')

Vilket verkar vara relaterat till hur jag importerar moment enligt detta. Så, hur ska jag göra detta? Jag verkar inte kunna importera moment på något annat sätt. Om jag använder

import moment from 'moment'

Jag får kompileringsfelet

Extern modul 'moment' har ingen standardexport

Svar #1

Jag har äntligen lyckats bli av med båda felen. Faktiskt för att undvika:

Kan inte anropa ett namnrum ('moment')

Du behöver använda:

import moment from 'moment'

Sedan för att undvika

"moment" har ingen standardexport

Du måste lägga till i din tsconfig.json (compilerOptions):

"allowSyntheticDefaultImports": true

REDIGERA 17/11/2016

Jag var också tvungen att lägga till följande i min rollup-config.js-fil:

plugins: [
  nodeResolve({jsnext: true, module: true}),
  commonjs({
    include: [
        'node_modules/rxjs/**',
        'node_modules/moment/**'
      ]
    }
  }),
  uglify()
]

Svar #2

Jag hittade en bra lösning på det aktuella problemet:

Installera ytterligare paketet moment-es6 med npm som tillhandahåller en standardexport. Importera sedan från 'moment-es6' istället för från 'moment':

import moment from 'moment-es6';
  • För användning med systemjs, lägg till följande i systemjs.config.js kartavsnitt:
    'moment-es6': 'npm:moment-es6/index.js'

  • lägg till 'node_modules/moment-es6/**' till include-delen i din rollup-konfigurations commonjs-sektion (rollup-plugin-commonjs)

Relaterade artiklar