Moment: ロケールなしで時間が必要

作成日 2015年06月12日  ·  20コメント  ·  ソース: moment/moment

私はwebpackビルドでmomentを使用しています。

require('moment')は、CDNのmoment-with-locales.min.jsを使用するのと同じように見えます(主にバンドルのサイズの増加から判断します)。

デフォルトの英語ロケールのみで瞬間を要求する方法はありますか? (つまり、CDNからのmoment.min.js相当します)。

私の質問は#2373に関連していると思います

最も参考になるコメント

webpackであなたと同じ問題が発生しました。 このSOの投稿では、ロケールのパッケージ化を回避する2つの異なる方法について説明しています。http

IgnorePluginは私のために仕事をしました:

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

全てのコメント20件

webpackであなたと同じ問題が発生しました。 このSOの投稿では、ロケールのパッケージ化を回避する2つの異なる方法について説明しています。http

IgnorePluginは私のために仕事をしました:

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

とてもかっこいい、ありがとう@balexand

IgnorePluginがその仕事をします、瞬間を追加するとき、私は11kbまでgzip圧縮されています。

それでも、ロケールありまたはロケールなしで要求するオプションがあると便利です。 すでに#2373があるので、これを閉じます

このコメントによると、npmjsにロケールがない瞬間があるはずです。

このモジュールは、ロケールなしで瞬間を公開しますhttps://github.com/ksloan/moment-mini

momentangular-cli momentと一緒に使用すると、ロケール全体がバンドルに含まれるようになります。

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$/)
]

@kunceviclocaleangular-cli localeを除外することを達成しましたか?

ちょっとハッキーだとは思いますが、私たちのプロジェクトでは、次の内容の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アイデアをありがとう! しかし、角度のある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の内部Webpack構成にパッチを適用することは長期的には良いアイデアではないと思います。本当に簡単に更新できません。 同じことがmomentconfigのパッチにも当てはまります。
理想的な解決策は、AngularがWebpack構成を開くことです。これにより、プラグインや瞬間を追加して、バンドルに未使用のものをそれほど多く含まないようにするオプションを提供できます。

@fergardiのコメントに加えて、正規表現をわずかに変更することで、不要なロケールが含まれることを回避できます。

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

この方法では、 es-* es-does-usなどのすべてのes-*ロケールを取得することはできません。
実際、この変更を行わないと、すべての地域の違いにより、3つではなく13のロケールになります。

ngx-build-plusを使用すると、AngularCLIでWebpack構成をイジェクトせずに調整できるはずです。

@SamVerschuerenこれはすごいです😸

モジュールからいくつかのディレクトリを無視するにはどうすればよいですか? 私のプロジェクトは巨大で、prodビルド中に提供しているので、チャンクごとにチャンクをビルドすることを考えているので、いくつかのディレクトリを無視/除外する必要がありますか? その少し緊急を助けてください。 前もって感謝します。

ベストプラクティスを使用するこれに対する更新はありますか? 最近の問題でこの修正が再度参照されていることがわかりますhttps://github.com/urish/ngx-moment/issues/212

このページは役に立ちましたか?
0 / 5 - 0 評価