Moment: تتطلب لحظة بدون لغات

تم إنشاؤها على ١٢ يونيو ٢٠١٥  ·  20تعليقات  ·  مصدر: moment/moment

أنا أستخدم اللحظة في بناء حزمة الويب.

يبدو أن require('moment') يعادل استخدام moment-with-locales.min.js من CDN (استنادًا إلى زيادة الحجم في حزمي بشكل أساسي).

هل هناك طريقة لطلب اللحظة باستخدام اللغة الإنجليزية الافتراضية فقط؟ (أي ما يعادل moment.min.js من CDN).

أعتقد أن سؤالي متعلق بالرقم 2373 #

التعليق الأكثر فائدة

لقد واجهت للتو نفس المشكلة التي واجهتك مع حزمة الويب. يغطي منشور SO هذا طريقتين مختلفتين لتجنب حزم اللغات: http://stackoverflow.com/a/25426019/239965

قام IgnorePlugin بالمهمة بالنسبة لي:

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

ال 20 كومينتر

لقد واجهت للتو نفس المشكلة التي واجهتك مع حزمة الويب. يغطي منشور SO هذا طريقتين مختلفتين لتجنب حزم اللغات: http://stackoverflow.com/a/25426019/239965

قام IgnorePlugin بالمهمة بالنسبة لي:

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

رائع جدا ، شكرا @ balexand

يقوم IgnorePlugin بالمهمة ، لقد انخفض إلى 11 كيلو بايت gzip عند إضافة لحظة.

لا يزال من الجيد أن يكون لديك خيار طلب مع لغات أو بدون لغات . إغلاق هذا ، حيث يوجد بالفعل رقم 2373

وفقًا لهذا التعليق ، يجب أن تكون هناك لحظة بدون لغات على npmjs.

تعرض هذه الوحدة اللحظة بدون اللغات https://github.com/ksloan/moment-mini

باستخدام moment مع angular-cli ، انتهى الأمر بكامل اللغة في مجموعتي.

image

نظرًا لأنني لا أستخدم --eject ضع https://github.com/moment/moment/issues/2416#issuecomment -111713308 في عدم العمل لدي. هل هناك أي حل باستخدام angular-cli لاستبعاد اللغة؟

balexand شكرًا ، إنه يعمل بالنسبة لي

إذا فات أحد الأشخاص الكتابة ، فإليك ما يلي:

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

npm i moment-mini-ts

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

ماذا عن تجاهل جميع اللغات مع IgnorePlugin باستثناء بعض من اختياري؟ على سبيل المثال ، تجاهل الكل ما عدا EN ، ES ، FR. هل يمكن عمل ذلك بتعبير عادي؟

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

تحرير: لقد اكتشفت ذلك ، في حال كان شخص ما لا يزال بحاجة إليه. وجدت في https://stackoverflow.com/a/25426019/2477303

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

kuncevic ، هل حققت استبعاد locale مع angular-cli ؟

أعلم أنه نوع من الاختراق ، ولكن بالنسبة لمشروعاتنا ، أنشأنا ملفًا moment-angular-cli-patch.js بالمحتوى التالي:

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

يتجاهل البرنامج النصي أعلاه جميع اللغات باستثناء الألمانية ، وقد تمت كتابته خصيصًا لـ @angular/cli 1.5.0 (قد يلزم التعامل مع الإصدارات الأخرى بشكل مختلف). ضمن ملفاتنا package.json ، قمنا بإضافته إلى البرامج النصية:

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

ليس حلاً رائعًا ولكنه حل ناجح ...

@ Dominique-mueller هذه فكرة مثيرة للاهتمام ، شكرًا للمشاركة

@ Dominique-Mueller في الوقت الحالي هي فكرة مثيرة للاهتمام ، شكرًا

@ دومينيك مولر شكرا على الفكرة! لقد انتهى بي الأمر بلحظة الترقيع بدلاً من الزاوي على الرغم من ذلك.

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 فكرة مثيرة للاهتمام ولكن لا أعتقد أن تصحيح تكوين حزمة الويب الداخلية لـ angular-cli يعد فكرة جيدة على المدى الطويل ، نظرًا لأن التصحيح سيعتمد حقًا على إصدارات angular-cli ولن تفعل أن تكون قادرًا على التحديث بسهولة حقًا. الشيء نفسه ينطبق على التصحيح في التكوين لحظة.
سيكون الحل المثالي هو أن يفتح Angular تهيئة webpack الخاصة بهم حتى نتمكن من إضافة مكونات إضافية أو لحظة لمنحنا خيارًا لعدم وجود الكثير من العناصر غير المستخدمة في الحزمة الخاصة بنا

بالإضافة إلى تعليق fergardi ، يؤدي التغيير

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

بهذه الطريقة لن تحصل على كل اللغات es-* مثل es-do ، es-us وهكذا.
في الواقع ، بدون هذا التغيير ، ينتهي بك الأمر بـ 13 لغة بدلاً من 3 بسبب جميع الاختلافات الإقليمية.

باستخدام ngx-build-plus ، يجب أن تكون قادرًا على ضبط تهيئة Webpack في Angular CLI دون إخراج.

تضمين التغريدة

كيف يمكنني تجاهل دليل قليل من الوحدات الخاصة بي؟ نظرًا لأن مشروعي ضخم ويتم تقديمه أثناء إنشاء المنتج ، لذلك أفكر في إنشاء أجزاء تلو الأخرى ، لذا سأحتاج إلى تجاهل / استبعاد عدد قليل من الدليل؟ الرجاء المساعدة بته عاجلة. شكرا لك مقدما.

هل هناك تحديث لهذا يستخدم أفضل الممارسات؟ أرى أن هناك مشكلة حديثة أشارت إلى هذا الإصلاح مرة أخرى https://github.com/urish/ngx-moment/issues/212

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات