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": trueEDIT 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 losincludede la sección commonjs de tus configuraciones de rollup (rollup-plugin-commonjs)
