Descripción del problema y pasos para reproducirlo:
Intentando implementar la configuración regional de la instancia en el proyecto de mecanografiado
https://momentjs.com/docs/#/i18n/instance -locale /
pero cuando import moment from 'moment'
me sale el error:
moment has no default export
objetivo:
Necesito formularios personalizados (acortados, como 'sec' en lugar de 'segundos') de cadenas humanizadas en algunas partes de la aplicación, por lo que me gustaría usar dos configuraciones regionales en una vista.
Medio ambiente:
proyecto mecanografiado
Otra información que puede ser útil:
TypeScript, Angular4
Si informa un problema, ejecute el siguiente código en el entorno que está utilizando e incluya el resultado:
console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)
Tue Jan 09 2018 15:46:46 GMT+0100 (CET)
VM12667:2 09/01/2018, 15:46:46
VM12667:3 -60
VM12667:4 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
VM12667:5 Uncaught ReferenceError: moment is not defined
at <anonymous>:5:13
md5-1f8dcc13f1f8244065e29a6dcf5a9efa
import * as moment from 'moment';
console.log('version', moment.version);
md5-1f8dcc13f1f8244065e29a6dcf5a9efa
version 2.20.1
Me gustaría evitar la solución import * as moment from 'moment';
ya que bloquea tres sacudidas en la agrupación
¡Muchas gracias! :)
RTFM 😂
Note: If you have trouble importing moment, try adding
"allowSyntheticDefaultImports": true in compilerOptions
in your tsconfig.json file and then use the syntax
https://momentjs.com/docs/#/use -it / typescript /
¿Existe la posibilidad de que esto se resuelva de una manera en la que allowSyntheticDefaultImport
ya no sea necesario? El problema de requerirlo es que requiere que todos los que usan el momento también tengan esta configuración activada.
Al no requerir esta configuración, permite que moment
se use fácilmente en proyectos que tienen su propia preferencia por allowSyntheticDefaultImport
, pero ahora esa configuración se impone efectivamente a todos.
Solo repito aquí que este es un problema realmente desagradable. Dado que el momento ha optado por no respetar la especificación oficial, significa que algunas bibliotecas ingresan a través de import * as moment from "moment"
mientras que otras bibliotecas se ejecutan a través de import defaultMoment from "moment"
. Entonces, cuando mi proyecto intenta cargar ambos, simplemente no puedo obtener la configuración correcta para obtener un resumen y compilarlo correctamente. Probé casi todas las permutaciones y combinaciones de allowSyntheticDefaultImports : true
, esModuleInterop : true
, moduleResolution : "node"
y skipLibCheck : true
y no puedo obtener una permutación que funcione correctamente. Una solución permitirá que funcione una biblioteca con un formato de importación, pero falla en el otro.
Hay una razón por la que existen especificaciones, y es para crear consistencia. ¿No hay forma de que ese momento pueda tener una variante de moment-es o algo que se pueda importar correctamente, de modo que las personas que quieran seguir la especificación puedan simplemente seguir la especificación, permitiendo que la cadena de herramientas JS funcione como se espera, en lugar de todas las hacks?
+1
Comentario más útil
RTFM 😂
https://momentjs.com/docs/#/use -it / typescript /