Moment: El tamaño del paquete NPM de moment.js es molesto

Creado en 17 ago. 2016  ·  26Comentarios  ·  Fuente: moment/moment

Verifiqué el tamaño de archivo de mi carpeta ./node_modules y parece que moment.js es la biblioteca no C más pesada. 2,1 MB es bastante. Un vistazo rápido al tamaño de la carpeta muestra:

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

La mayor parte del peso proviene de la publicación de versiones comprimidas de moment.js con npm , así como de la doble publicación de todas las configuraciones regionales. Pero los lugares por sí solos son bastante pesados ​​por sí mismos.

Como tal, pensé que podría ser bueno para moment.js y la comunidad reducir esta cantidad.

  • [] ¿Sería posible omitir la carpeta ./src no se publique en npm ?
  • [] ¿Sería posible omitir la carpeta ./min no se publique en npm ?
  • [] ¿Sería posible mover la carpeta ./locales a un paquete npm separado para reducir el momento al mínimo?
BuilRelease

Comentario más útil

el consenso general es que el espacio en disco en una aplicación de nodo no es una prima de la misma manera que lo es en el navegador

No creo que puedas construir una buena biblioteca con este tipo de mentalidad.

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

En el momento en que la gente se da cuenta de que el tamaño del paquete es un problema real y usted decide no hacer nada al respecto, moment está muerto.
Para cualquiera que busque alternativas ligeras, date-fns sería una excelente opción.

Todos 26 comentarios

La gente usa el momento de diferentes maneras, y el consenso general es que el espacio en disco en una aplicación de nodo no es una prima de la misma manera que lo es en el navegador.

Dicho esto, no estoy seguro de qué está pasando exactamente en la carpeta min :

image

No estoy seguro de por qué necesitamos moment-with-locales.min.js en npm. Debería ser suficiente tener moment.min.js y locales.min.js , ¿verdad?

Además, no debería haber una necesidad de archivos no minimizados en una carpeta min ( locale.js y moment-with-locales.js ).

La carpeta min realmente tiene un nombre incorrecto. Construido podría ser un nombre mejor. Pero ahí es donde viven los archivos moment-with-locales y locales hasta que ejecutamos la tarea de actualización del índice para su lanzamiento.

Ciertamente podríamos sacar los archivos moment-with-locales de npm específicamente, pero no estoy seguro de qué valor proporciona.

@martinheidegger, ¿ podría explicar en qué condiciones es un problema el tamaño de todo el paquete? El paquete crece a medida que la gente quiere más opciones para consumir la biblioteca. Si vamos a eliminar las cosas que enumera, necesitamos publicar paquetes separados que sean mínimos en algún aspecto, y luego publicar también un paquete grande que lo tenga todo.

¿Puede dar un ejemplo con otra biblioteca que reduzca todo al mínimo en algunas / todas sus compilaciones npm?

La instalación npm de lodash es de 1,4 MB, mientras que la minificada es de solo _69 KB_
El hecho de que lodash también publique cada función como un paquete propio solo conduce a una larga lista de paquetes que se instalan nuevamente, porque se hace referencia a ellos en otro paquete.
Cuando miro mi carpeta node_modules típica con un tamaño de alrededor de 300 MB, no estoy seguro de si vale la pena el esfuerzo de hacer que moment.js sea un poco más pequeño.

Y hay muchos más, eventos mucho más grandes, estos son solo algunos de ellos

  • rx: 6,6 MB
  • rxjs: 3,3 MB
  • @angular : 10,8 MB
  • Internacional: 79,1 MB
  • gruñido: 6,2 MB

Si bien realmente no me importa el tamaño del paquete npm, me sorprende que tenga que incluir 58 KB para las fechas manipuladas de una manera sensata (asumiendo que no necesito configuraciones regionales, que son mucho más pesadas) 😞

Estoy cansado de discutir este tipo de cosas. Pensé que una huella más baja haría que la instalación de mi paquete fuera más rápida (de los cuales es el momento más importante). Supongo que corro contra los molinos de viento. Entonces: kthxbye.

@martinheidegger prueba el hilo, al menos son más cuerdos que npm y almacenan el paquete en caché, por lo que no deberías dedicar tanto tiempo a las descargas :)

Estoy enfrentando el mismo problema. Hacer import moment from 'moment'; aumenta el tamaño del paquete de 30 kb a 250 kb !!! ¿Hay alguna solución fácil, chicos?

@ paramsingh88 Parece que la única opción es no usarlo. Encontré este hilo debido al mismo problema. El tamaño de mi proyecto aumenta en 58kB simplemente haciendo moment.unix(created).format('MMMM D, YYYY') . ¡Absolutamente loco!

No entiendo esta actitud:

el espacio en disco en una aplicación de nodo no es una prima de la misma manera que lo es en el navegador.

El problema es que ese momento no es una aplicación de nodo, es una biblioteca que se puede usar en una aplicación de back-end o en la biblioteca de front-end. En este caso, sí, necesito usar Moment.js para validar las fechas en el front-end de la aplicación antes de enviarlas al backend (que tiene su propia validación separada).

El tamaño del momento sin locales es 50k (minificado), el tamaño con locales es de alrededor de 300k (minificado). Si desea hacer algo al respecto, consulte la discusión aquí https://github.com/moment/moment/issues/2373

Y si usa algún administrador de paquetes o lo que sea que esté complicando la vida, tráigalos también.

Disculpa, me equivoque. (editado)

el consenso general es que el espacio en disco en una aplicación de nodo no es una prima de la misma manera que lo es en el navegador

No creo que puedas construir una buena biblioteca con este tipo de mentalidad.

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

En el momento en que la gente se da cuenta de que el tamaño del paquete es un problema real y usted decide no hacer nada al respecto, moment está muerto.
Para cualquiera que busque alternativas ligeras, date-fns sería una excelente opción.

Hola, el momento npm es de aproximadamente 3 MB, sin embargo, esto afecta el tamaño de la herramienta de edición lambda en línea. encogerse definitivamente ayudaría

Usar esto en una aplicación angular comprimida con gzip termina siendo un 70% del tamaño de mis paquetes más pequeños. Sería fantástico si pudiéramos excluir las funciones que no necesitamos, ya que en este momento tengo que import * as moment from 'moment' todo el paquete.

moment.js básicamente duplica el tamaño de la mayor parte de mi aplicación Angular:

image

Esto realmente duele en los dispositivos móviles.

@silentsnooc En tiempo de ejecución, se supone que debe cargar solo las configuraciones regionales que necesita. Entonces, la principal preocupación para usted es cargar archivos locales de forma diferida solo cuando los usa.

@kylekatarnls Si pudiera mostrar un ejemplo para aquellos de nosotros que usamos agrupadores, sería útil. Gracias.

El ejemplo de JSPM dado en el documento aquí:
https://momentjs.com/docs/#/i18n/loading -into-browser /

también funciona para webpack, y supongo que puede hacer el trabajo para otros paquetes.

No probado, pero este comentario tiene muchos me gusta:
https://github.com/moment/moment/issues/2517#issuecomment -185836313

Creo que momentos.js no estaba destinado a ser utilizado en la interfaz del navegador y no había planes por parte de los encargados de mantenimiento para hacerlo. Cuando nos topamos con un problema similar, terminamos usando date-fns en el front-end y manteniendo momentos.js en el backend. Para un nuevo proyecto, vería si date-fns podría usarse en ambos extremos.

@demisx No necesito ver más:

image

Gracias por la pista. : +1: También gracias a @xinghul que lo mencionó primero.

busque una lib de tamaño más pequeño, que es una alternativa a moment.js

https://github.com/iamkun/dayjs

Simplemente reemplazó momentjs con dayjs. Parece estar funcionando bien para mis propósitos y solo es alrededor de 15Kb con la configuración regional y el conjunto de complementos fromNow. Fantástico.

Diferencias de tamaño del paquete de aplicaciones Ionic 4 / Angular 8:

con momentJS : agrega = 204 KB

con dayJS : agrega = 6 KB

Solo necesito manipulaciones y formateo básico de datos / hora. Así que he decidido ir con dayJS : https://github.com/iamkun/dayjs

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

También obtengo 249kb, no estoy seguro de si el colaborador va a hacer algo al respecto ... mudarse a date.fns

No probado, pero este comentario tiene muchos me gusta:
# 2517 (comentario)

Esto funcionó bien para todos los que buscan una optimización rápida.
Permití que mi momento pasara de 654.7kB a 178.4kB. Puede que aún sea grande, pero es una mejora.
Ojalá pudiéramos importar la función como date-fns.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ninigix picture ninigix  ·  3Comentarios

chitgoks picture chitgoks  ·  3Comentarios

benhathaway picture benhathaway  ·  3Comentarios

Shoroh picture Shoroh  ·  3Comentarios

IbraheemAlSaady picture IbraheemAlSaady  ·  3Comentarios