moment hours examples español javascript gulp momentjs webpack

javascript - hours - moment to timestamp



¿Cómo evitar que moment.js cargue configuraciones regionales con el paquete web? (5)

Con webpack2 y versiones recientes de momento puedes hacer:

import {fn as moment} from ''moment''

Y luego en webpack.config.js haces:

resolve: { packageMains: [''jsnext:main'', ''main''] }

Hola, ¿de todos modos puede detener moment.js de cargar todas las configuraciones regionales (solo necesito inglés) cuando usa su paquete web? Estoy mirando la fuente, parece que si hasModule se define cuál es para el paquete web entonces siempre trata de requerir () cada localidad. Estoy bastante seguro de que esto necesita una solicitud de extracción para solucionarlo. Pero, de todos modos, podemos solucionarlo con una configuración de paquete web.

Aquí está la configuración de mi paquete web para cargar momentosjs

resolve: { alias: { moment: path.join(__dirname, "src/lib/bower/moment/moment.js") }, },

Entonces, en cualquier lugar que lo necesite, simplemente requiero (''momento'') que funcione, pero está agregando unos 250kb de archivos de idioma innecesarios a mi paquete. También estoy usando la versión Bower de momentjs y gulp.

Además, si esto no puede ser resuelto por una configuración de paquete web aquí hay un enlace a la función donde carga las configuraciones regionales https://github.com/moment/moment/blob/develop/moment.js#L760-L772 Intenté agregar "&& module.exports.loadLocales" a la sentencia if, pero adivino que webpack no funciona de manera tal que funcionaría, solo requiere que no importa lo que crea que use una expresión regular ahora, entonces realmente no sé cómo lo harías ir a arreglarlo. De todos modos, gracias por cualquier ayuda.


El código require(''./locale/'' + name) puede usar cada archivo en el directorio locale . Entonces, el paquete web incluye cada archivo como módulo en su paquete. No puede saber qué idioma está usando.

Hay dos complementos que son útiles para dar al paquete web más información sobre qué módulo debe incluirse en su paquete: ContextReplacementPlugin e IgnorePlugin .

require(''./locale/'' + name) se llama context (un requerimiento que contiene una expresión). webpack infiere cierta información de este fragmento de código: un directorio y una expresión regular. Aquí: directory = ".../moment/locale" regular expression = /^.*$/ . Por lo tanto, de forma predeterminada, se incluyen todos los archivos en el directorio de locale .

El ContextReplacementPlugin permite anular la información inferida, es decir, proporcionar una nueva expresión regular (para elegir los idiomas que desea incluir).

Otro enfoque es ignorar el requerimiento con IgnorePlugin .

Aquí hay un ejemplo:

var webpack = require("webpack"); module.exports = { // ... plugins: [ new webpack.ContextReplacementPlugin(/moment[////]locale$/, /de|fr|hu/) // new webpack.IgnorePlugin(/^/.//locale$/, /moment$/) ] };


En nuestro proyecto, incluyo momentos como este: import moment from ''moment/src/moment''; y eso parece hacer el truco. Sin embargo, nuestro uso del momento es muy simple, por lo que no estoy seguro de si habrá alguna inconsistencia con el SDK. Creo que esto funciona porque WebPack no sabe cómo encontrar los archivos de configuración regional estáticamente, por lo que recibe una advertencia (que es fácil de ocultar al agregar una carpeta vacía en moment/src/lib/locale/locale ) pero no incluye la configuración regional.



Según la respuesta de Adam McCrmick, usted estuvo cerca, cambie su alias a:

resolve: { alias: { moment: ''moment/src/moment'' }, },