Moment: requer momento sem localidades

Criado em 12 jun. 2015  ·  20Comentários  ·  Fonte: moment/moment

Estou usando o momento em uma construção de webpack.

Parece que require('moment') é o equivalente a usar moment-with-locales.min.js do CDN (a julgar principalmente pelo aumento de tamanho em meu pacote).

Existe uma maneira de exigir o momento apenas com o locale inglês padrão? (ou seja, o equivalente a moment.min.js do CDN).

Acho que minha pergunta está relacionada a # 2373

Comentários muito úteis

Acabei de ter o mesmo problema que você com o webpack. Esta postagem do SO cobre 2 maneiras diferentes de evitar empacotar as localidades: http://stackoverflow.com/a/25426019/239965

O IgnorePlugin fez o trabalho por mim:

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

Todos 20 comentários

Acabei de ter o mesmo problema que você com o webpack. Esta postagem do SO cobre 2 maneiras diferentes de evitar empacotar as localidades: http://stackoverflow.com/a/25426019/239965

O IgnorePlugin fez o trabalho por mim:

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

Muito legal, obrigado @balexand

O IgnorePlugin faz o trabalho, estou com 11kb gzipado ao adicionar momento.

Ainda assim, seria bom ter a opção de exigir com localidades ou sem localidades . Fechando este, pois já existe o # 2373

De acordo com este comentário , deve haver um momento sem localidades em npmjs.

este módulo expõe o momento sem as localidades https://github.com/ksloan/moment-mini

Usando moment com angular-cli , toda a localidade acabou no meu pacote.

image

Como não estou usando --eject sinalize este https://github.com/moment/moment/issues/2416#issuecomment -111713308 por não funcionar para mim. Existe alguma solução com angular-cli para excluir o local?

@balexand Obrigado, funciona para mim

Se alguém perder a digitação, aqui está o meu garfo:

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

npm i moment-mini-ts

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

Que tal ignorar todos os locais com IgnorePlugin, exceto alguns de minha escolha? Por exemplo, ignore tudo exceto EN, ES, FR. Isso pode ser feito com uma expressão regular?

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

Edit: Eu descobri, caso alguém ainda precise. Encontrado em https://stackoverflow.com/a/25426019/2477303

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

@kuncevic , você conseguiu excluir locale com angular-cli ?

Eu sei que é meio hacky, mas para nossos projetos, criamos um arquivo moment-angular-cli-patch.js com o seguinte conteúdo:

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

O script acima ignora todos os locais, exceto alemão, e foi escrito especificamente para @angular/cli 1.5.0 (outras versões podem precisar ser tratadas de forma diferente). Em nossos arquivos package.json , nós o adicionamos aos scripts:

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

Não é uma ótima solução, mas uma solução que funciona ...

@ dominique-mueller que ideia interessante, obrigado por compartilhar

@ dominique-mueller Por agora é uma ideia interessante, obrigado

@ dominique-mueller obrigado pela ideia! No entanto, acabei remendando o momento em vez do 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 ideia interessante, mas não acho que corrigir a configuração interna do webpack do angular-cli seja uma boa ideia a longo prazo, visto que o patch seria realmente dependente das versões do angular-cli e você não o faria t ser capaz de atualizar realmente facilmente. O mesmo vale para o patch na configuração do momento.
A solução ideal seria o angular abrir sua configuração do webpack para que possamos adicionar plug-ins ou um momento para nos dar a opção de não ter tantas coisas não utilizadas em nosso pacote

Além do comentário de @fergardi , alterar levemente o regex evita incluir mais alguns locais indesejados.

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

Desta forma, você não obtém todos os es-* locais como es-do , es-us e assim por diante.
Na verdade, sem essa alteração, você acaba com 13 localidades em vez de 3 por causa de todas as variações regionais.

Com o ngx-build-plus, você deve ser capaz de ajustar a configuração do Webpack no Angular CLI sem ejetar.

@SamVerschueren ISTO É INCRÍVEL 😸

Como posso ignorar alguns diretórios de meus módulos? Como meu projeto é enorme e está dando while prod build, então estou pensando em construir chunks por chunks então precisarei ignorar / excluir alguns diretórios? Por favor, ajude é um pouco urgente. Desde já, obrigado.

existe uma atualização para isso que usa as práticas recomendadas? Vejo que um problema recente referenciou essa correção novamente https://github.com/urish/ngx-moment/issues/212

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

Questões relacionadas

slavafomin picture slavafomin  ·  3Comentários

tanepiper picture tanepiper  ·  3Comentários

ninigix picture ninigix  ·  3Comentários

dogukankotan picture dogukankotan  ·  3Comentários

M-Zuber picture M-Zuber  ·  3Comentários