Moment: requiere momento sin locales

Creado en 12 jun. 2015  ·  20Comentarios  ·  Fuente: moment/moment

Estoy usando moment en una compilación de paquete web.

Parece que require('moment') es el equivalente a usar moment-with-locales.min.js de CDN (a juzgar principalmente por el aumento de tamaño en mi paquete).

¿Hay alguna manera de requerir un momento con solo la configuración regional en inglés predeterminada? (es decir, el equivalente de moment.min.js de CDN).

Supongo que mi pregunta está relacionada con el n. ° 2373

Comentario más útil

Acabo de experimentar el mismo problema que tú con el paquete web. Esta publicación SO cubre 2 formas diferentes de evitar empaquetar las configuraciones regionales: http://stackoverflow.com/a/25426019/239965

El IgnorePlugin hizo el trabajo por mí:

plugins: [
  new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]

Todos 20 comentarios

Acabo de experimentar el mismo problema que tú con el paquete web. Esta publicación SO cubre 2 formas diferentes de evitar empaquetar las configuraciones regionales: http://stackoverflow.com/a/25426019/239965

El IgnorePlugin hizo el trabajo por mí:

plugins: [
  new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]

Muy bien, gracias @balexand

El IgnorePlugin hace el trabajo, tengo 11kb comprimido en gzip al agregar momento.

Aún así, sería bueno tener la opción de requerir con configuraciones regionales o sin configuraciones regionales . Cerrando este, como ya hay # 2373

Según este comentario , debería haber un momento sin configuraciones regionales en npmjs.

este módulo expone el momento sin las configuraciones regionales https://github.com/ksloan/moment-mini

Usando moment con angular-cli obtuve que toda la configuración regional terminó en mi paquete.

image

Como no estoy usando --eject , marque este https://github.com/moment/moment/issues/2416#issuecomment -111713308 porque no me funciona. ¿Existe alguna solución con angular-cli para excluir la configuración regional?

@balexand Gracias, me funciona

Si alguien no escribe, aquí está mi bifurcación:

https://github.com/kirillgroshkov/moment-mini-ts

npm i moment-mini-ts

import * as moment from 'moment-mini-ts'

¿Qué tal ignorar todas las configuraciones regionales con IgnorePlugin excepto algunas de mi elección? Por ejemplo, ignore todos excepto EN, ES, FR. ¿Se puede hacer eso con una expresión regular?

plugins: [
  new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]

Editar: Lo descubrí, en caso de que alguien aún lo necesite. Encontrado en https://stackoverflow.com/a/25426019/2477303

plugins: [
  new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en|es|fr/),
  // new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]

@kuncevic , ¿ locale con angular-cli ?

Sé que es algo hacky, pero para nuestros proyectos hemos creado un archivo moment-angular-cli-patch.js con el siguiente contenido:

'use strict';

const fs = require( 'fs' );

console.log( 'Patchin internal Angular CLI configuration ...' );
const webpackProductionConfigPath = './node_modules/@angular/cli/models/webpack-configs/production.js';
fs.readfile( webpackProductionConfigPath, 'utf-8', ( error, fileContent ) => {
  const momentFix = 'extraPlugins.push( new webpack.ContextReplacementPlugin( /moment[\\/\\\\]locale$/, /de.js/ ) );';
  if ( fileContent.indexOf( momentFix ) === -1 ) {
    const uniqueContent = 'return {'; // Line 112
    const modifiedFileContent = fileContent.replace( uniqueContent, `${ momentFix }\n    ${ uniqueContent }` );
    fs.writeFile( webpackProductionConfigPath, modifiedFileContent, 'utf-8', ( error ) => {
      console.log( 'Done.' );
    } );
  } else {
    console.log( 'Nothing to do.' );
  }
} );

El script anterior ignora todas las configuraciones regionales excepto el alemán, y está escrito específicamente para @angular/cli 1.5.0 (es posible que otras versiones deban manejarse de manera diferente). Dentro de nuestros archivos package.json , lo hemos agregado a los scripts:

"scripts": {
  "postinstall": "node ./moment-angular-cli-patch.js"
}

No es una gran solución, pero sí una solución que funciona ...

@ dominique-mueller esa es una idea interesante, gracias por compartir

@ dominique-mueller Por ahora es interesante idea, gracias

@ dominique-mueller gracias por la idea! Sin embargo, terminé parcheando el momento en lugar de la cli angular.

const fs = require('fs');
const filePath = './node_modules/moment/moment.js';
const patch = {
    find: 'var aliasedRequire = require;',
    replace: 'var aliasedRequire = function(){};'
};

console.log('Patching moment');
let source = fs.readFileSync(filePath);
const index = source.indexOf(patch.find);
if (index === -1) {
    console.log('Nothing to do.');
} else {
    source = source.toString().replace(patch.find, patch.replace);
    fs.writeFileSync(filePath, source, 'utf-8');
    console.log('done');
}

@ dominique-mueller idea interesante, pero no creo que parchear la configuración interna del paquete web de angular-cli sea una buena idea a largo plazo, dado que el parche dependería realmente de las versiones de angular-cli y usted no lo haría ' t ser capaz de actualizar con mucha facilidad. Lo mismo ocurre con el parche en el momento config.
La solución ideal sería que angular abra su configuración de paquete web para que podamos agregar complementos o un momento para darnos una opción para no tener tantas cosas sin usar en nuestro paquete.

Además del comentario de @fergardi , cambiar ligeramente la expresión regular evita incluir algunas configuraciones regionales no deseadas.

plugins: [
  new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /(en|es|fr)$/),
]

De esta forma no obtendrá todos los locales es-* como es-do , es-us y así sucesivamente.
En realidad, sin este cambio terminará con 13 configuraciones regionales en lugar de 3 debido a todas las variaciones regionales.

Con ngx-build-plus debería poder ajustar la configuración de Webpack en Angular CLI sin expulsar.

@SamVerschueren ESTO ES INCREÍBLE 😸

¿Cómo puedo ignorar algunos directorios de mis módulos? Como mi proyecto es enorme y se está dando mientras prod build, estoy pensando en construir fragmentos por fragmentos, ¿tendré que ignorar / excluir algunos directorios? Por favor ayude a que sea un poco urgente. Gracias por adelantado.

¿Hay alguna actualización de esto que utilice las mejores prácticas? Veo que un problema reciente hizo referencia a esta solución nuevamente https://github.com/urish/ngx-moment/issues/212

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

Temas relacionados

dogukankotan picture dogukankotan  ·  3Comentarios

Delgan picture Delgan  ·  3Comentarios

M-Zuber picture M-Zuber  ·  3Comentarios

vbullinger picture vbullinger  ·  3Comentarios

danieljsinclair picture danieljsinclair  ·  3Comentarios