Descrição do problema e etapas para reproduzir:
Tentando implementar a localidade da instância no projeto typescript
https://momentjs.com/docs/#/i18n/instance -locale /
mas quando eu import moment from 'moment'
obtenho um erro:
moment has no default export
propósito:
Eu preciso de formulários personalizados (encurtando, como 'sec' em vez de 'segundos') de strings humanizadas em algumas partes do aplicativo, então eu gostaria de usar duas localidades em uma visualização.
Ambiente:
projeto datilografado
Outras informações que podem ser úteis:
TypeScript, Angular4
Se você estiver relatando um problema, execute o seguinte código no ambiente que está usando e inclua a saída:
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
Eu gostaria de evitar a solução import * as moment from 'moment';
, uma vez que bloqueia três tremores no empacotamento
Muito Obrigado! :)
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 uma chance de que isso seja resolvido de uma forma em que allowSyntheticDefaultImport
não seja mais necessário? O problema de exigir é que exige que todos que usam o momento também tenham essa configuração ativada.
Ao não exigir essa configuração, você permite que moment
seja facilmente usado em projetos que têm sua própria preferência por allowSyntheticDefaultImport
, mas agora essa configuração é efetivamente imposta a todos.
Só estou dizendo aqui que este é um problema realmente desagradável. Uma vez que o momento optou por não respeitar as especificações oficiais, isso significa que algumas bibliotecas puxam via import * as moment from "moment"
enquanto outras bibliotecas rodam via import defaultMoment from "moment"
. Portanto, quando meu projeto tenta carregar os dois, simplesmente não consigo obter as configurações corretas para obter o rollup para compilá-lo corretamente. Eu tentei quase todas as permutações e combinações de allowSyntheticDefaultImports : true
, esModuleInterop : true
, moduleResolution : "node"
e skipLibCheck : true
e não consigo obter uma permutação que funcione corretamente. Uma solução permitirá que uma biblioteca com um formato de importação funcione, mas falha no outro.
Existe uma razão para que as especificações existam, ans é para criar consistência. Não há como aquele momento ter uma variante moment-es ou algo que possa ser importado corretamente, de forma que as pessoas que desejam seguir as especificações possam apenas seguir as especificações, permitindo que o conjunto de ferramentas JS funcione como esperado, ao invés de todos os hacks?
+1
Comentários muito úteis
RTFM 😂
https://momentjs.com/docs/#/use -it / typescript /