Moment: трСбуСтся ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π±Π΅Π· Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 12 июн. 2015  Β·  20ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: moment/moment

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² сборкС Π²Π΅Π±-ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ require('moment') эквивалСнтно использованию moment-with-locales.min.js ΠΈΠ· CDN (судя Π² основном ΠΏΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°).

Π•ΡΡ‚ΡŒ Π»ΠΈ способ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с английской локалью ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ? (Ρ‚.Π΅. эквивалСнт moment.min.js ΠΈΠ· CDN).

Π”ΡƒΠΌΠ°ΡŽ, ΠΌΠΎΠΉ вопрос связан с # 2373

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― столкнулся с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹, с webpack. Π’ этом сообщСнии SO Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ 2 Ρ€Π°Π·Π½Ρ‹Ρ… способа ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ: http://stackoverflow.com/a/25426019/239965

IgnorePlugin сдСлали Π·Π° мСня эту Ρ€Π°Π±ΠΎΡ‚Ρƒ:

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

ВсС 20 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― столкнулся с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹, с webpack. Π’ этом сообщСнии SO Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ 2 Ρ€Π°Π·Π½Ρ‹Ρ… способа ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ: http://stackoverflow.com/a/25426019/239965

IgnorePlugin сдСлали Π·Π° мСня эту Ρ€Π°Π±ΠΎΡ‚Ρƒ:

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

ΠžΡ‡Π΅Π½ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎ, спасибо @balexand

IgnorePlugin выполняСт свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° я ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатого Π΄ΠΎ 11 ΠšΠ‘.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ с языками ΠΈΠ»ΠΈ Π±Π΅Π· Π½ΠΈΡ… . Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ этот, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ ΡƒΠΆΠ΅ # 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 А ΠΏΠΎΠΊΠ° интСрСсная идСя, спасибо

@ dominique-mueller спасибо Π·Π° идСю! Π― Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ исправил ΠΌΠΎΠΌΠ΅Π½Ρ‚ вмСсто 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 интСрСсная идСя, Π½ΠΎ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ исправлСниС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π²Π΅Π±-ΠΏΠ°ΠΊΠ΅Ρ‚Π° angular-cli являСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π² долгосрочной пСрспСктивС, учитывая, Ρ‡Ρ‚ΠΎ исправлСниС Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ вСрсий angular-cli, Π° Π²Ρ‹ Π±Ρ‹ этого Π½Π΅ сдСлали Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ возмоТности ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ. Π’ΠΎ ΠΆΠ΅ самоС ΠΈ с ΠΏΠ°Ρ‚Ρ‡Π΅ΠΌ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.
Π˜Π΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ для angular ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ своСго Π²Π΅Π±-ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΈΠ»ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ Π² нашСм ΠΏΠ°ΠΊΠ΅Ρ‚Π΅.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡŽ @fergardi , нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ рСгулярного выраТСния позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅Ρ‰Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»Π΅ΠΉ.

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

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ всС Π»ΠΎΠΊΠ°Π»ΠΈ es-* Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ es-do , es-us ΠΈ Ρ‚. Π”.
ЀактичСски, Π±Π΅Π· этого измСнСния Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ 13 Π»ΠΎΠΊΠ°Π»Π΅ΠΉ вмСсто 3 ΠΈΠ·-Π·Π° всСх Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ngx-build-plus Π²Ρ‹ смоТСтС Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Webpack Π² Angular CLI Π±Π΅Π· извлСчСния.

@SamVerschueren ЭВО Π£Π”Π˜Π’Π˜Π’Π•Π›Π¬ΠΠž 😸

Как я ΠΌΠΎΠ³Ρƒ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈΠ· ΠΌΠΎΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ? ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½, ΠΈ ΠΎΠ½ Π΄Π°Π΅Ρ‚ Π²ΠΎ врСмя сборки prod, поэтому я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ куски ΠΏΠΎ кускам, поэтому Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ / ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ нСсколько ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ срочно. Π—Π°Ρ€Π°Π½Π΅Π΅ спасибо.

Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ для этого, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ? Π― Π²ΠΈΠΆΡƒ, Ρ‡Ρ‚ΠΎ нСдавняя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° снова ΡΡΡ‹Π»Π°Π»Π°ΡΡŒ Π½Π° это исправлСниС https://github.com/urish/ngx-moment/issues/212

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ