Moment: erfordern Moment ohne Gebietsschemas

Erstellt am 12. Juni 2015  ·  20Kommentare  ·  Quelle: moment/moment

Ich verwende Moment in einem Webpack-Build.

Es sieht so aus, als ob require('moment') der Verwendung von moment-with-locales.min.js aus dem CDN entspricht (hauptsächlich nach der Größenzunahme in meinem Paket zu urteilen).

Gibt es eine Möglichkeit, einen Moment nur mit dem englischen Standardgebietsschema zu verlangen? (dh das Äquivalent von moment.min.js von CDN).

Ich denke, meine Frage bezieht sich auf #2373

Hilfreichster Kommentar

Ich habe gerade das gleiche Problem wie du mit Webpack erlebt. Dieser SO-Post behandelt 2 verschiedene Möglichkeiten, um das Packen der Locales zu vermeiden: http://stackoverflow.com/a/25426019/239965

Das IgnorePlugin hat die Arbeit für mich erledigt:

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

Alle 20 Kommentare

Ich habe gerade das gleiche Problem wie du mit Webpack erlebt. Dieser SO-Post behandelt 2 verschiedene Möglichkeiten, um das Packen der Locales zu vermeiden: http://stackoverflow.com/a/25426019/239965

Das IgnorePlugin hat die Arbeit für mich erledigt:

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

Sehr cool, danke @balexand

Das IgnorePlugin erledigt den Job, ich bin beim Hinzufügen von Momenten auf 11kb gzipped.

Trotzdem wäre es schön, die Möglichkeit zu haben, mit Gebietsschemas oder ohne Gebietsschemas zu verlangen. Schließe diesen, da es bereits #2373 gibt

Laut diesem Kommentar sollte es einen Moment ohne Gebietsschemas auf npmjs geben.

Dieses Modul macht den Moment ohne die Gebietsschemas verfügbar https://github.com/ksloan/moment-mini

Wenn ich moment mit angular-cli , ist das gesamte Gebietsschema in meinem Paket gelandet.

image

Da ich --eject nicht verwende, melde dieses https://github.com/moment/moment/issues/2416#issuecomment -111713308 bei mir nicht an. Gibt es eine Lösung mit angular-cli , um das Gebietsschema auszuschließen?

@balexand Danke, bei mir funktioniert es

Wenn jemand Eingaben vermisst, hier ist mein Fork:

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

npm i moment-mini-ts

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

Wie wäre es, mit IgnorePlugin alle Gebietsschemas außer einigen meiner Wahl zu ignorieren? Ignorieren Sie beispielsweise alle außer EN, ES, FR. Geht das mit einem regulären Ausdruck?

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

Edit: Ich habe es herausgefunden, falls es noch jemand braucht. Gefunden in https://stackoverflow.com/a/25426019/2477303

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

@kuncevic , haben Sie locale mit angular-cli ?

Ich weiß, es ist etwas hackig, aber für unsere Projekte haben wir eine moment-angular-cli-patch.js Datei mit folgendem Inhalt erstellt:

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

Das obige Skript ignoriert alle Gebietsschemas außer Deutsch und wurde speziell für @angular/cli 1.5.0 (andere Versionen müssen möglicherweise anders behandelt werden). In unseren package.json Dateien haben wir es zu den Skripten hinzugefügt:

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

Keine gute Lösung, aber eine Lösung, die funktioniert ...

@dominique-mueller das ist eine interessante Idee, danke fürs Teilen

@dominique-mueller Fürs Erste ist eine interessante Idee, danke

@dominique-mueller danke für die idee! Am Ende habe ich jedoch Moment anstelle von eckigem cli gepatcht.

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 interessante Idee, aber ich denke nicht, dass das Patchen der internen Webpack-Konfiguration des angle-cli auf lange Sicht eine gute Idee ist, da der Patch wirklich von den angle-cli-Versionen abhängig wäre und Sie würden nicht in der Lage sein, wirklich einfach zu aktualisieren. Das gleiche gilt für den Patch in der Momentkonfiguration.
Die ideale Lösung wäre, dass angle seine Webpack-Konfiguration öffnet, damit wir Plugins oder Moment hinzufügen können, um uns die Möglichkeit zu geben, nicht so viele ungenutzte Dinge in unserem Bundle zu haben

Zusätzlich zum Kommentar von @fergardi vermeidet eine geringfügige Änderung der Regex das

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

Auf diese Weise erhalten Sie nicht alle es-* Gebietsschemas wie es-do , es-us und so weiter.
Tatsächlich erhalten Sie ohne diese Änderung aufgrund der regionalen Unterschiede 13 anstelle von 3 Gebietsschemas.

Mit ngx-build-plus sollten Sie die Webpack-Konfiguration in der Angular-CLI anpassen können, ohne sie auszuwerfen.

@SamVerschueren DAS IST ERSTAUNLICH 😸

Wie kann ich einige Verzeichnisse aus meinen Modulen ignorieren? Da mein Projekt riesig ist und es während des Prod-Builds gibt, denke ich daran, Chunks für Chunks zu erstellen, also muss ich einige Verzeichnisse ignorieren / ausschließen? Bitte helft etwas dringend. Danke im Voraus.

Gibt es dazu ein Update, das Best Practices verwendet? Ich sehe, dass ein aktuelles Problem erneut auf diesen Fix verwiesen hat https://github.com/urish/ngx-moment/issues/212

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

danieljsinclair picture danieljsinclair  ·  3Kommentare

tanepiper picture tanepiper  ·  3Kommentare

ninigix picture ninigix  ·  3Kommentare

M-Zuber picture M-Zuber  ·  3Kommentare

chitgoks picture chitgoks  ·  3Kommentare