Búsqueda de sitios web

typescript - Usando Rollup para el compilador AoT de Angular 2 e importando Moment.js


Estoy intentando seguir la guía oficial de AoT para Angular 2, y estoy usando Moment.js en mi aplicación. Moment.js está en mi archivo packages.json, y estoy usando la versión 2.15.0. Hasta ahora lo he estado importando así:

import * as moment from 'moment';

Pero cuando llego a la parte donde tengo que ejecutar rollup, termino con el siguiente error:

No se puede llamar a un espacio de nombres ('moment')

Que parece estar relacionado con la forma en que importo moment según esto. Entonces, ¿cómo se supone que debo hacer esto? No parece que pueda importar moment de otra manera. Si uso

import moment from 'moment'

Obtengo el error de compilación

El módulo externo 'moment' no tiene una exportación predeterminada

Respuesta #1

Finalmente he logrado deshacerme de ambos errores. De hecho, para evitar:

No se puede llamar a un espacio de nombres ('moment')

Necesitas usar:

import moment from 'moment'

Luego para evitar

“moment” no tiene exportación por defecto

Tienes que añadir en tu tsconfig.json (compilerOptions):

"allowSyntheticDefaultImports": true

EDIT 17/11/2016

También tuve que agregar lo siguiente a mi archivo rollup-config.js:

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

Respuesta #2

Encontré una buena solución para el problema en cuestión:

Instala con npm el paquete adicional moment-es6 que proporciona una exportación predeterminada. Luego importa desde 'moment-es6' en lugar de desde 'moment':

import moment from 'moment-es6';
  • Para usar con systemjs, agregue lo siguiente a la sección map de systemjs.config.js:
    'moment-es6': 'npm:moment-es6/index.js'

  • agrega 'node_modules/moment-es6/**' a los include de la sección commonjs de tus configuraciones de rollup (rollup-plugin-commonjs)

Artículos relacionados