Moment: O tamanho do pacote NPM de moment.js é incômodo

Criado em 17 ago. 2016  ·  26Comentários  ·  Fonte: moment/moment

Eu verifiquei o tamanho do arquivo da minha pasta ./node_modules e parece que moment.js é a biblioteca não C mais pesada. 2.1 MB é bastante. Uma rápida olhada no tamanho da pasta mostra:

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

A maior parte do peso vem da publicação de versões compactadas de moment.js com npm , bem como da publicação dupla de todos os locais. Mas os locais por si só são bastante pesados.

Como tal, pensei que seria bom para o moment.js e para a comunidade reduzir esta quantidade ?!

  • [] Seria possível omitir a publicação da pasta ./src em npm ?
  • [] Seria possível omitir a publicação da pasta ./min em npm ?
  • [] Seria possível mover a pasta ./locales para um pacote npm separado para reduzir o momento ao mínimo?
BuilRelease

Comentários muito úteis

o consenso geral é que o espaço em disco em um aplicativo de nó não é um prêmio da mesma maneira que é no navegador

Eu não acho que você pode construir uma boa biblioteca com esse tipo de mentalidade.

screen shot 2018-08-01 at 11 16 23 am

No momento em que as pessoas percebem que o tamanho do pacote é um problema real e você opta por não fazer nada a respeito, moment está morto.
Para quem está procurando alternativas leves, date-fns seria uma excelente escolha.

Todos 26 comentários

As pessoas usam o momento de maneiras diferentes, e o consenso geral é que o espaço em disco em um aplicativo de nó não é um prêmio da mesma forma que é no navegador.

Dito isso, não tenho certeza do que exatamente está acontecendo na pasta min :

image

Não sei por que precisamos de moment-with-locales.min.js em npm. Deve ser suficiente ter moment.min.js e locales.min.js , certo?

Além disso, não deve haver necessidade de arquivos não minimizados em uma pasta min ( locale.js e moment-with-locales.js ).

A pasta min tem apenas um nome incorreto. Construído pode ser um nome melhor. Mas é exatamente aí que os arquivos moment-with-locales e locales vivem até que executemos a tarefa grunt de atualização do índice para o lançamento.

Certamente poderíamos retirar os arquivos moment-with-locales especificamente do npm, mas não tenho certeza de qual valor ele fornece.

@martinheidegger pode explicar em que condições o tamanho de toda a embalagem é um problema. O pacote cresce à medida que as pessoas querem mais opções para consumir a biblioteca. Se quisermos remover as coisas que você lista, precisamos publicar pacotes separados que são mínimos em alguns aspectos e, em seguida, publicar também um pacote grande que contém tudo.

Você pode dar um exemplo com outra biblioteca que reduz tudo ao mínimo em algumas / todas as suas compilações npm?

A instalação npm do lodash é de 1,4 MB, enquanto a minificada é de apenas _69 KB_
O fato de que o lodash também publica todas as funções como um pacote próprio só leva a uma longa lista de pacotes que são instalados novamente, porque são referenciados em outro pacote.
Ao examinar minha pasta node_modules típica com um tamanho de cerca de 300 MB, não tenho certeza se vale a pena o esforço para tornar o moment.js um pouco menor.

E há muito mais, eventos muito maiores, aqui estão apenas alguns deles

  • rx: 6,6 MB
  • rxjs: 3,3 MB
  • @angular : 10,8 MB
  • Intl: 79,1 MB
  • grunhido: 6,2 MB

Embora eu realmente não me importe com o tamanho do pacote npm, acho surpreendente que tenha que incluir 58 KB para datas manipuladas de maneira sã (assumindo que não preciso de locales, que são muito mais pesados) 😞

Estou cansado de discutir esse tipo de coisa. Achei que menos pegada tornaria a instalação do meu pacote mais rápida (de que o momento é o maior). Acho que estou correndo contra moinhos de vento. Então: kthxbye.

@martinheidegger , experimente o yarn, pelo menos eles são mais lógicos do que o npm e armazenam o pacote em cache, então você não deve gastar tanto tempo com downloads :)

Estou enfrentando o mesmo problema. Fazer import moment from 'moment'; aumenta o tamanho do pacote de 30kb para 250kb !!! Existe uma solução fácil pessoal ??

@ paramsingh88 Parece que a única opção é não usá-lo. Encontrei este tópico por causa do mesmo problema. O tamanho do meu projeto aumenta em 58kB simplesmente fazendo moment.unix(created).format('MMMM D, YYYY') . Absolutamente louco!

Não entendo essa atitude:

o espaço em disco em um aplicativo de nó não é um prêmio da mesma maneira que é no navegador.

O problema é que o momento não é um aplicativo de nó - é uma biblioteca que pode ser usada em um aplicativo de back-end ou na biblioteca de front-end. Neste caso, sim, eu preciso usar Moment.js para validar datas no front-end do aplicativo antes de enviá-las para o back-end (que tem sua própria validação separada).

O tamanho do momento sem locales é 50k (reduzido), o tamanho com locais é em torno de 300k (reduzido). Se você quiser fazer algo sobre isso, verifique a discussão aqui https://github.com/moment/moment/issues/2373

E se você usar algum gerenciador de pacotes ou qualquer coisa que esteja complicando a vida, traga-os também.

Desculpe, minha culpa. (editado)

o consenso geral é que o espaço em disco em um aplicativo de nó não é um prêmio da mesma maneira que é no navegador

Eu não acho que você pode construir uma boa biblioteca com esse tipo de mentalidade.

screen shot 2018-08-01 at 11 16 23 am

No momento em que as pessoas percebem que o tamanho do pacote é um problema real e você opta por não fazer nada a respeito, moment está morto.
Para quem está procurando alternativas leves, date-fns seria uma excelente escolha.

Olá, o momento npm é de cerca de 3 MB, no entanto, isso afeta o tamanho da ferramenta inline de edição lambda. encolher definitivamente ajudaria

Usar isso em um aplicativo Angular compactado com gzip acaba tendo 70% do tamanho dos meus pacotes menores. Seria ótimo se pudéssemos excluir recursos de que não precisamos, pois no momento tenho de import * as moment from 'moment' o pacote inteiro.

moment.js basicamente dobra o tamanho da maior parte do meu aplicativo Angular:

image

Isso realmente dói em dispositivos móveis.

@silentsnooc Em tempo de execução, você deve carregar apenas os locais de que precisa. Portanto, a principal preocupação para você é carregar lentamente os arquivos de locales apenas quando você os usa.

@kylekatarnls Se você pudesse mostrar um exemplo para aqueles de nós que usam bundlers, isso seria útil. Obrigado.

O exemplo para JSPM fornecido no documento aqui:
https://momentjs.com/docs/#/i18n/loading -into-browser /

também funciona para webpack e acho que pode fazer o trabalho para outros empacotadores.

Não tentei, mas este comentário tem muitos gostos:
https://github.com/moment/moment/issues/2517#issuecomment -185836313

Eu acredito que o moment.js não foi feito para ser usado no front-end do navegador e não havia planos dos mantenedores para fazê-lo. Quando fomos atingidos por um problema semelhante, acabamos usando date-fns no front end e mantendo momentos.js no backend. Para um novo projeto, veria se date-fns poderia ser usado em ambas as extremidades.

@demisx Não preciso ver mais:

image

Obrigado pela dica. : +1: Obrigado também a

encontre uma lib de tamanho menor, que é uma alternativa para moment.js

https://github.com/iamkun/dayjs

Apenas substituiu momentjs por dayjs. Parece estar funcionando bem para os meus propósitos e é apenas cerca de 15 KB com locale e conjunto de plugins fromNow. Fantástico.

Diferenças de tamanho do pacote de aplicativos Ionic 4 / Angular 8:

com momentJS : adiciona = 204 KB

com dayJS : adiciona = 6 KB

Eu só preciso de dados básicos / formatação de hora e manipulações apenas. Então, decidi ir com dayJS : https://github.com/iamkun/dayjs

Screen Shot 2020-05-15 at 11 45 16 am

Também estou recebendo 249kb, não tenho certeza se o colaborador fará algo sobre isso .. mudar para date.fns

Não tentei, mas este comentário tem muitos gostos:
# 2517 (comentário)

Isso funcionou bem para todos que buscam uma otimização rápida.
Permitiu que meu momento fosse de 654,7kB para 178,4kB. Ainda pode ser grande, mas é uma melhoria.
Gostaria de poder importar a função como data-fns.

Esta página foi útil?
0 / 5 - 0 avaliações