Moment: membutuhkan momen tanpa lokal

Dibuat pada 12 Jun 2015  ·  20Komentar  ·  Sumber: moment/moment

Saya menggunakan momen dalam build webpack.

Sepertinya require('moment') setara dengan menggunakan moment-with-locales.min.js dari CDN (dilihat terutama dari peningkatan ukuran bundel saya).

Apakah ada cara untuk meminta momen hanya dengan lokal bahasa Inggris default? (yaitu setara dengan moment.min.js dari CDN).

Saya kira pertanyaan saya terkait dengan #2373

Komentar yang paling membantu

Saya baru saja mengalami masalah yang sama seperti Anda dengan webpack. Posting SO ini mencakup 2 cara berbeda untuk menghindari pengemasan lokal: http://stackoverflow.com/a/25426019/239965

IgnorePlugin melakukan pekerjaan untuk saya:

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

Semua 20 komentar

Saya baru saja mengalami masalah yang sama seperti Anda dengan webpack. Posting SO ini mencakup 2 cara berbeda untuk menghindari pengemasan lokal: http://stackoverflow.com/a/25426019/239965

IgnorePlugin melakukan pekerjaan untuk saya:

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

Sangat keren, terima kasih @balexand

IgnorePlugin melakukan pekerjaan itu, saya turun ke 11kb gzip saat menambahkan momen.

Masih akan menyenangkan untuk memiliki opsi untuk meminta dengan lokal atau tanpa lokal . Menutup yang ini, karena sudah ada #2373

Menurut komentar ini , seharusnya ada momen tanpa lokal di npmjs.

modul ini mengekspos momen tanpa lokal https://github.com/ksloan/moment-mini

Menggunakan moment dengan angular-cli sehingga seluruh lokal berakhir di bundel saya.

image

Karena saya tidak menggunakan tanda --eject ini https://github.com/moment/moment/issues/2416#issuecomment -111713308 tidak berfungsi untuk saya. Apakah ada solusi dengan angular-cli untuk mengecualikan lokal?

@balexand Terima kasih, ini berhasil untuk saya

Jika seseorang melewatkan pengetikan, inilah garpu saya:

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

npm i moment-mini-ts

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

Bagaimana dengan mengabaikan semua lokal dengan IgnorePlugin kecuali beberapa pilihan saya? Misalnya, abaikan semua kecuali EN, ES, FR. Bisakah itu dilakukan dengan ekspresi reguler?

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

Sunting: Saya menemukan jawabannya, kalau-kalau seseorang masih membutuhkannya. Ditemukan di https://stackoverflow.com/a/25426019/2477303

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

@kuncevic , apakah Anda berhasil mengecualikan locale dengan angular-cli ?

Saya tahu ini semacam peretasan, tetapi untuk proyek kami, kami telah membuat file moment-angular-cli-patch.js dengan konten berikut:

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

Skrip di atas mengabaikan semua lokal kecuali bahasa Jerman, dan ditulis khusus untuk @angular/cli 1.5.0 (versi lain mungkin perlu ditangani secara berbeda). Dalam file package.json kami, kami telah menambahkannya ke skrip:

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

Bukan solusi yang bagus tetapi solusi yang berhasil ...

@dominique-mueller itu ide yang menarik, terima kasih telah berbagi

@dominique-mueller Untuk saat ini adalah ide yang menarik, terima kasih

@dominique-mueller terima kasih atas idenya! Saya akhirnya menambal momen alih-alih angular cli.

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 ide yang menarik tetapi saya tidak berpikir menambal konfigurasi webpack internal dari angular-cli adalah ide yang bagus dalam jangka panjang, mengingat bahwa tambalan akan sangat bergantung pada versi angular-cli dan Anda tidak akan melakukannya. tidak dapat memperbarui dengan sangat mudah. Hal yang sama berlaku untuk tambalan di konfigurasi momen.
Solusi ideal adalah agar angular membuka konfigurasi webpack mereka sehingga kami dapat menambahkan plugin atau momen untuk memberi kami opsi agar tidak memiliki begitu banyak barang yang tidak digunakan dalam bundel kami

Selain komentar @fergardi , sedikit mengubah regex menghindari memasukkan beberapa lokal yang tidak diinginkan.

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

Dengan cara ini Anda tidak mendapatkan semua es-* lokal seperti es-do , es-us dan seterusnya.
Sebenarnya, tanpa perubahan ini Anda akan mendapatkan 13 lokal alih-alih 3 karena semua variasi regional.

Dengan ngx-build-plus Anda harus dapat menyesuaikan konfigurasi Webpack di Angular CLI tanpa mengeluarkan.

@SamVerschueren INI LUAR BIASA

Bagaimana saya bisa mengabaikan beberapa direktori dari modul saya? Karena proyek saya sangat besar dan memberi sementara prod build, jadi saya berpikir untuk membuat potongan demi potongan sehingga perlu Mengabaikan/mengecualikan beberapa direktori? Tolong bantu agak mendesak. Terima kasih sebelumnya.

apakah ada pembaruan untuk ini yang menggunakan praktik terbaik? Saya melihat bahwa masalah baru-baru ini mereferensikan perbaikan ini lagi https://github.com/urish/ngx-moment/issues/212

Apakah halaman ini membantu?
0 / 5 - 0 peringkat