Moment: nécessite un moment sans paramètres régionaux

Créé le 12 juin 2015  ·  20Commentaires  ·  Source: moment/moment

J'utilise moment dans un build webpack.

Il semble que require('moment') soit l'équivalent d'utiliser moment-with-locales.min.js de CDN (à en juger principalement par l'augmentation de la taille de mon forfait).

Existe-t-il un moyen d'exiger un moment avec uniquement les paramètres régionaux anglais par défaut ? (c'est-à-dire l'équivalent de moment.min.js de CDN).

Je suppose que ma question est liée au #2373

Commentaire le plus utile

Je viens de rencontrer le même problème que vous avec webpack. Cet article SO couvre 2 manières différentes d'éviter d'empaqueter les paramètres régionaux : http://stackoverflow.com/a/25426019/239965

Le IgnorePlugin fait le travail pour moi :

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

Tous les 20 commentaires

Je viens de rencontrer le même problème que vous avec webpack. Cet article SO couvre 2 manières différentes d'éviter d'empaqueter les paramètres régionaux : http://stackoverflow.com/a/25426019/239965

Le IgnorePlugin fait le travail pour moi :

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

Très cool, merci @balexand

L'IgnorePlugin fait le travail, je suis descendu à 11 ko gzippé lors de l'ajout de moment.

Ce serait quand même bien d'avoir la possibilité d'exiger avec ou sans locales . Fermeture de celui-ci, car il existe déjà le #2373

Selon ce commentaire , il devrait y avoir un moment sans locales sur npmjs.

ce module expose le moment sans les locales https://github.com/ksloan/moment-mini

En utilisant moment avec angular-cli , l'ensemble des paramètres régionaux s'est retrouvé dans mon bundle.

image

Comme je n'utilise pas --eject signalez celui-ci https://github.com/moment/moment/issues/2416#issuecomment -111713308 pour qu'il ne fonctionne pas pour moi. Existe-t-il une solution avec angular-cli pour exclure les paramètres régionaux ?

@balexand Merci, ça marche pour moi

Si quelqu'un omet de taper, voici mon fork :

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

npm i moment-mini-ts

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

Que diriez-vous d'ignorer tous les paramètres régionaux avec IgnorePlugin, sauf certains de mon choix ? Par exemple, ignorez tout sauf EN, ES, FR. Est-ce possible avec une expression régulière ?

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

Edit: j'ai compris, au cas où quelqu'un en aurait encore besoin. Trouvé dans https://stackoverflow.com/a/25426019/2477303

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

@kuncevic , avez-vous réussi à exclure locale avec angular-cli ?

Je sais que c'est un peu bidon, mais pour nos projets, nous avons créé un fichier moment-angular-cli-patch.js avec le contenu suivant :

'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.' );
  }
} );

Le script ci-dessus ignore toutes les locales à l'exception de l'allemand, et il est écrit spécifiquement pour @angular/cli 1.5.0 (d'autres versions devront peut-être être gérées différemment). Dans nos fichiers package.json , nous l'avons ajouté aux scripts :

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

Pas une bonne solution mais une solution qui fonctionne...

@dominique-mueller c'est une idée intéressante, merci pour le partage

@dominique-mueller Pour l'instant, c'est une idée intéressante, merci

@dominique-mueller merci pour l'idée ! J'ai fini par patcher le moment au lieu du cli angulaire.

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 idée intéressante mais je ne pense pas que patcher la configuration interne du webpack de l'angular-cli soit une bonne idée à long terme, étant donné que le patch dépendrait vraiment des versions angular-cli et vous le feriez ' t être en mesure de mettre à jour très facilement. Il en va de même pour le patch dans la config du moment.
La solution idéale serait qu'angular ouvre sa configuration webpack afin que nous puissions ajouter des plugins ou un moment pour nous donner une option pour ne pas avoir autant de choses inutilisées dans notre bundle

En plus du commentaire de

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

De cette façon, vous n'obtenez pas toutes les es-* locales comme es-do , es-us et ainsi de suite.
En fait, sans ce changement, vous vous retrouvez avec 13 locales au lieu de 3 à cause de toutes les variations régionales.

Avec ngx-build-plus, vous devriez pouvoir ajuster la configuration Webpack dans Angular CLI sans éjecter.

@SamVerschueren C'EST INCROYABLE

Comment puis-je ignorer quelques répertoires de mes modules ? Comme mon projet est énorme et qu'il donne pendant la construction de la production, je pense donc construire des morceaux par morceaux, donc devrai-je ignorer/exclure quelques répertoires ? S'il vous plaît aider son peu urgent. Merci d'avance.

existe-t-il une mise à jour utilisant les meilleures pratiques ? Je vois qu'un problème récent fait à nouveau référence à ce correctif https://github.com/urish/ngx-moment/issues/212

Cette page vous a été utile?
0 / 5 - 0 notes