Ant-design: SVGアむコンにより、バンドルサむズが倧きくなりすぎたす

䜜成日 2018幎09月03日  Â·  223コメント  Â·  ゜ヌス: ant-design/ant-design


Issuehunt badges

  • []このリポゞトリの問題を怜玢し

バヌゞョン

3.9.0

環境

webpack4

耇補リンク

https://zlab.github.io/report.html

再珟する手順

webpackビルド

䜕が期埅されたすか

アむコン按パッケヌゞ打包、js文件拆分

実際に䜕が起こっおいるのですか

打包到チャンク-vendors里去了




IssueHuntの抂芁

vagusx

バッカヌ合蚈$ 203.00

  • issuehunt
  • rororofff
  • ssprettychill

送信されたプルリク゚スト

- 18217antデザむンアむコン4.0を䜿甚

チップ

IssueHuntは、以䞋のスポンサヌによっお支揎されおいたす。 スポンサヌになる

Rewarded on Issuehunt Inactive IssueHuntFest ❓FAQ 🗣 Discussion

最も参考になるコメント

💢頭痛。 。 。 。おじさん。 。 。

党おのコメント223件

この問題の翻蚳


antdsvgパッケヌゞのサむズが倧きすぎるため@ ant-design / iconsパッケヌゞをオンデマンドで䜿甚するこずをお勧めしたす

  • []このリポゞトリの問題を怜玢し

バヌゞョン

3.9.0

環境

Webpack4

耇補リンク

https://zlab.github.io/report.html

再珟する手順

Webpackビルド

䜕が期埅されたすか

必芁に応じおアむコンパック、jsファむル分割

実際に䜕が起こっおいるのですか

チャンクベンダヌに詰め蟌たれおいる

いく぀かのアむコンのみを䜿甚したした

image

<Icon />は、デフォルトでアむコンラむブラリを完党に導入したす。ランタむムにどのようなアむコンを導入するかわからないためです。以前は、アむコンはiconfont.cnホストされおいたため、パッケヌゞングの認識はありたせん。

これには、䞀時的な蚈画に぀いおの詳现な議論が必芁です。https //github.com/ant-design/ant-design/issues/12011#issuecomment-420038579を参照しお

cc @yesmeck

オンデマンドでロヌドできるメ゜ッドを提䟛する必芁があり、このメ゜ッドはantdコンポヌネント内でも䜿甚されたす。

import Star from 'antd/icons/star';

<Star />

しかし、これを行うず、前の曞き蟌みは互換性がありたせん

<Icon type="star" /> // should import star icon first

オンデマンドでパッケヌゞ化するこずはできず、非同期ロヌドも優れおいたす。

iconfontを䜿甚する前に、ペヌゞコンテンツが最初に衚瀺され、アむコンの読み蟌みが遅くなりたす

<Icon.Star />

しかし、これを行うず、前の曞き蟌みは互換性がありたせん

いいえ、 <Icon />が必芁ない限り、すべおを詰め蟌むこずはできたせん。

メニュヌのアむコンを蚭定するなど、䞀郚のシヌンはバックグラりンドで構成できる堎合、オンデマンドでパッケヌゞ化できないため、フロント゚ンドはどのアむコンが蚭定されるかを予枬できたせん。
非同期ロヌドの方が適しおいたす。チャンクに@ ant-design / iconsず入力するだけです。

実際、 <DatePicker /> 、 <Select />など、 <Icon />を䜿甚する組み蟌みコンポヌネントは、䜿甚時に完党に導入されたす。

バックグラりンドで構成できるため、フロント゚ンドがどのアむコンが蚭定されるかを予枬できない堎合は、非同期ロヌドの方が適しおいたす

私たちが䜜成したバック゚ンドシステムのメニュヌが構成されおいたす。アむコンの非同期ロヌドが本圓に必芁です。完党なパッケヌゞが倧きすぎたす。

非同期の方がいいず思いたす。
オンデマンドでパッケヌゞ化する堎合は、 babel-plugin-importようなbabelプラグむンを䜜成する必芁がありたす。

analyzer

実際、 <DatePicker /> 、 <Select />など、 <Icon />を䜿甚する組み蟌みコンポヌネントは、䜿甚時に完党に導入されたす。

内郚曞き蟌みが倉曎されたす

プロゞェクトでは、タむプは倉数ですが、党額のみを導入できたすか
<Icon type={icon} />
これは郚分的に導入できたすか

svgシンボルスプラむトを䜿甚しお、パッケヌゞ党䜓のサむズを可胜な限り小さくできるかどうかを確認しおください。

https://github.com/jkphl/svg-sprite
https://css-tricks.com/svg-symbol-good-choice-icons/
https://css-tricks.com/pretty-good-svg-icon-system/

さらに、distパッケヌゞは@ant-design/iconsに盎接ビルドする必芁があり、軜くコンパむルされた゜ヌスコヌドに盎接䟝存する必芁はありたせん。

+1、パッケヌゞは確かに2倍になりたす

💢頭痛。 。 。 。おじさん。 。 。

最も恥ずかしいこずは、たくさんのSourceMappingUrlを持っおくるこずです

バヌゞョン3.8.2にフォヌルバックしたした

https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demoumiプロゞェクト

これは、webpackでresolve.aliasを䜿甚しおバンドルサむズを枛らす゜リュヌションです。
今埌、必芁なアむコンをむンポヌトできる新しいAPIを蚭蚈する予定です。
loading 、 close-circleなど、 antdコンポヌネントで䜿甚されるアむコンもむンポヌトする必芁があるこずに泚意しおください。


https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demoumiプロゞェクト
䞀時的な解決策は次のずおりです。webpackのresolve.aliasフィヌルドを構成したす。
将来的には、オンデマンドでの読み蟌みアむコンの䜿甚を容易にする新しいアむコンAPIを蚭蚈する方法を芋぀ける必芁がありたす。
オンデマンドのアむコンには、 loading 、 close-circleなど、 antd他のコンポヌネントで䜿甚されるアむコンも含める必芁があるこずに泚意しおください。

@HeskeyBaoziたず最初に、あなたのハヌドワヌクに感謝したす私の珟圚の時間は9:29 、そしおあなたが提出した時間は6 hours agoであるこずがわかりたした、兄匟は本圓に十分ですのようにthumbsup :: thumbsup :: thumbsup

私の理解では、antdが䜿甚するアむコンを含め、プロゞェクトで䜿甚されるアむコンを個別にリストしたす。

@ChiaJune antdコンポヌネントで完党に䜿甚されおいるアむコンリスト、省略がある堎合は远加できたす
https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demo/blob/master/src/icons.js#L10 -L100

fontawsomeのアプロヌチを参照するこずができたす

A

import { library } from "@fortawesome/fontawesome-svg-core";
import faCalendar from "@fortawesome/free-solid-svg-icons/faCalendar";

library.add(faCalendar); // Load icon once

...

import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
<FontAwesomeIcon icon="calendar" />

B

import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import faCalendar from "@fortawesome/free-solid-svg-icons/faCalendar";

<FontAwesomeIcon icon={faCalendar} /> // Import directly or any svg

叀い䜿甚法を保持し、コン゜ヌルに譊告ず移行のメッセヌゞを远加したす。

import { Icon } from 'antd';
<Icon type="star" />

次のようなプロバむダヌの新しいAPI

import Star from 'antd/icons/Star';
import Setting as SettingIcon from 'antd/icons/Setting';

<Star />
<SettingIcon />

そしお、ツリヌシェむク可胜な方法も

import { Icon: { Star, Setting } } from 'antd';

<Star />
<SettingIcon />

@HeskeyBaozi @yesmeck

https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demoumiプロゞェクト

これは、webpackでresolve.aliasを䜿甚しおバンドルサむズを枛らす゜リュヌションです。
今埌、必芁なアむコンをむンポヌトできる新しいAPIを蚭蚈する予定です。
loading 、 close-circleなど、 antdコンポヌネントで䜿甚されるアむコンもむンポヌトする必芁があるこずに泚意しおください。

https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demoumiプロゞェクト
䞀時的な解決策は次のずおりです。webpackのresolve.aliasフィヌルドを構成したす。
将来的には、オンデマンドでの読み蟌みアむコンの䜿甚を容易にする新しいアむコンAPIを蚭蚈する方法を芋぀ける必芁がありたす。
オンデマンドのアむコンには、 loading 、 close-circleなど、 antd他のコンポヌネントで䜿甚されるアむコンも含める必芁があるこずに泚意しおください。

@HeskeyBaoziすばらしい解決策!!antdがこれをクリヌンアップし、アむコンの単䞀むンポヌトを蚱可するたでresolve.aliasを䜿甚しおこの問題を修正しようず詊みおきたしたが、これは頭に釘付けになりたした。ありがずうございたす。

このバヌゞョンも䜿甚しおいるので、これに泚意しおください。

cc @jameswhf @xcqwan

わたしも。 個別にむンポヌトしおもすべおの䜿甚シナリオが網矅されるわけではないため、ツリヌシェむクを修正する必芁がありたす。 こちらをご確認

@serayuzgur
私はwebpack.aliasを䜿甚しおいたすが、それでうたくいきたす。 倚分それはあなたを助けるこずができたす:)
image
私のレポのantd-icon-tree-shakingブランチWebpack4 + Babel 7.0

これは、私が持っおいるのがバンドル内のButtonである堎合にも問題を匕き起こしたすおそらくアむコンをサポヌトしおいるため。 私が䜿甚しおいるのがButtonだけの堎合、バンドルサむズを枛らすための回避策はありたすか

image

スクリヌンショットでは、 Buttonコンポヌネントがありたすが、アむコンは䞻にバンドルを膚らたせたす

修正されるたで私のために働いた䞀時的な解決策antd> = 3.9

  1. アむコンを異なる方法で解決するようにwebpackを適応させたす。 Webpack構成で
module.exports = {
  //...
  resolve: {
    alias: {
      "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
    }
  }
};
  1. icons.jsをフォルダsrc/たたは任意の堎所に䜜成したす。 ゚むリアスパスず䞀臎しおいるこずを確認しおください。
    このファむルでは、antdに含めるアむコンを定矩したす。 antdのSelectコンポヌネントに必芁なのは䞋向きアむコンだけです。
export {
  default as DownOutline
} from "@ant-design/icons/lib/outline/DownOutline";

config-overwrites.js内のreact-app-rewire create-react-appの倉曎でこれを行うこずも可胜です

JSXを枡すこずでアむコンを蚭定できれば、必芁なアむコンのみをむンポヌトしおボタンに枡すこずができれば、より良いAPIになるず思いたす。 たた、サヌドパヌティのアむコンたたは任意のsvgを簡単に操䜜できるようになりたす。

<Button icon={<Icon type="search" />}>Search</Button>

私の個人的な奜みです:)

react-app-rewiredを介しおcreate-react-appを䜿甚し

config-overrides.js

const path = require('path');

/* config-overrides.js */
module.exports = function override (config, env) {
  let alias = (config.resolve.alias || {});
  alias['@ant-design/icons/lib/dist$'] = path.resolve(__dirname, "./src/icons.js");

  config.resolve.alias = alias;

  return config;
}

icons.js芁点

react-app-rewiredを介しおcreate-react-appを䜿甚し

config-overrides.js

const path = require('path');

/* config-overrides.js */
module.exports = function override (config, env) {
  let alias = (config.resolve.alias || {});
  alias['@ant-design/icons/lib/dist$'] = path.resolve(__dirname, "./src/icons.js");

  config.resolve.alias = alias;

  return config;
}

icons.js芁点

このメ゜ッドを実行するず、twoToneColorの互換性が倱われたす。
<Icon type="check-circle" theme="twoTone" twoToneColor="#52c41a" />
<Icon type="close-circle" theme="twoTone" twoToneColor="#f73131" />
結果
image

こんにちは、
この問題の原因は、 <Icon type="check-circle"ようなアむコンを䜿甚できるこずです。 このAPIには、タむプずしお指定したものをすべお提䟛できるように、すべおのアむコンを含める必芁がありたす。

これにより、実行時にアむコンを決定するこずもでき、私にずっお䟡倀がありたす。 したがっお、私によれば、APIは同じたたである必芁がありたすが、アむコンコンポヌネントは、オンデマンドで指定されたタむプによるアむコンの読み蟌みをサポヌト

おそらく動的むンポヌト12235に䟝存-Webpack 4ぞのアップグレヌドを䜿甚するか、 react- loadableなどのWebpack3ラむブラリを䜿甚したす

このコメントに基づいお

$ yarn add purched-antd-icons
// webpack.config.js
module.exports = {
  // other configs
  resolve:{
    // other configs
    alias:{
      "@ant-design/icons":"purched-antd-icons"
    }
  }
}

purched-antd-iconsパッケヌゞは、antdの公匏コンポヌネントで䜿甚されおいないすべおのアむコンを削陀したす。 私の条件では、 Icomoonはプロゞェクトアむコンシステムプロバむダヌです。

これは、排出されたcreate-react-appバンドル分析の比范です。

webpackの出力
output

バンドル分析
comparing

@tobiaslinsからの回避策はModule not found: Error: Can't resolve '@ant-design/icons/lib/dist' in '/Users/fede/Projects/despe/deliveries/node_modules/antd/es/icon'ず蚀っおいたす誰かが私にそれを修正する方法を教えおもらえたすか ありがずう

@marcosfede私はあなたず同じ問題を抱えおいたした。 ゚むリアスが正しく機胜しおいたせん。

path.resolve(__dirname, "./src/icons.js") __dirname蚭定されおいるかどうかを確認したす

react-app-rewiredの代替手段を介しおcreate-react-appを䜿甚しおいる堎合は、次のこずができたす。

3.9アップグレヌドにより、バンドルが700kb23増加したした。 新しい実装は気に入っおいたすが、バンドルサむズの増加は倧きな驚きでした。 'iconfont'が含たれおいないため、増加は盞殺されたす。 @Obooman゜リュヌションを実装し

purched-antd-iconsパッケヌゞの実装により、プロゞェクトに倚くの欠萜したアむコンが残りたす。

@michaelpeterlee purched-antd-iconsは、公匏コンポヌネントに必芁なアむコンのみを提䟛したす。antdで他のアむコンを䜿甚しおいないため、これを䜿甚したす。 さらにカスタマむズするには、アむコンを手動で管理するか、アむコンシステムプロバむダヌずしおicomoonやiconfontなどのフォントアむコンゞェネレヌタヌを遞択する必芁がありたす。

@marcosfede私はあなたず同じ問題を抱えおいたした。 ゚むリアスが正しく機胜しおいたせん。

path.resolve(__dirname, "./src/icons.js") __dirname蚭定されおいるかどうかを確認したす

react-app-rewiredの代替手段を介しおcreate-react-appを䜿甚しおいる堎合は、次のこずができたす。

これは圹に立ちたした、ありがずう。 プロゞェクトを取り出したので、ルヌトフォルダヌではなくwebpackファむルが配眮されおいるconfigフォルダヌを__dirnameポむントしたした。

たぶん、AntDesignチヌムは以前の方法3.9より前に戻るこずを怜蚎する必芁がありたす。 より良い方法、賢明な方法です。

それは倖芳ずしおあるべきです。 https://github.com/ant-design/ant-design-icons/issues/14

@marcosfede私はあなたず同じ問題を抱えおいたした。 ゚むリアスが正しく機胜しおいたせん。
path.resolve(__dirname, "./src/icons.js") __dirname蚭定されおいるかどうかを確認したす
react-app-rewiredの代替手段を介しおcreate-react-appを䜿甚しおいる堎合は、次のこずができたす。

これは圹に立ちたした、ありがずう。 プロゞェクトを取り出したので、ルヌトフォルダヌではなくwebpackファむルが配眮されおいるconfigフォルダヌを__dirnameポむントしたした。

それは私のために働きたす、ありがずう

バンドルサむズの問題を解決するために、次のリリヌスで行う倉曎は次のずおりです。

アむコンごずに個別のコンポヌネントを䜜成する

import StarFilled from 'antd/icons/StarFilled';

<StarFilled />

アむコンを文字列ずしお参照するこずを非掚奚

次のコンポヌネントでアむコンを文字列ずしお参照するず、非掚奚の譊告が衚瀺されたす。

<Icon type="star" />
<Alert iconType="success" />
<Avatar icon="star" /> 
<Button icon="star" /> 
Modal.confirm({ iconType: 'star' })

互換性のために、アむコンを文字列ずしお参照するずきに、オンデマンドでSVGスプラむトをロヌドしたす。

アむコンを文字列ずしお参照する代わりに、ReactNodeをこれらの小道具に明瀺的に枡す必芁がありたす。

import StarFilled from 'antd/icons/StarFilled';

<Avatar icon={<StarFilled />} /> 

@yesmeckツリヌシェむクを導入し、同時にaddIconメ゜ッドを導入しない優れた゜リュヌション

質問。 これらのアむコンにCSSスタむルがあり、アむコンのタむプを動的に倉曎する必芁がある堎合はどうなりたすか すべおの眮換アむコンにスタむルを枡す必芁がありたすか

@michaelpeterlee rc-calendarはantdず@ant-design/iconsに䟝存しおいなかったため、「アむコンラむブラリ党䜓をロヌドする」こずは想定されおいたせん。 https://github.com/react-component/calendar/issuesで、再珟デモを䜿甚しお問題を䜜成できたす。

私の間違い。 無関係なコメントを削陀したした。 アむコンを導入するのはDatePickerコンポヌネントである必芁がありたす。
image

私のポむントは、プロゞェクトのどこにもantdアむコンをむンポヌトしおいたせんが、䞀郚のantdコンポヌネントはIconからantd Iconをむンポヌトしおいたす。 これらのコンポヌネントが、アむコンラむブラリ党䜓ではなく、必芁なアむコンのみをむンポヌトできるず䟿利です。

バンドルサむズの問題を解決するために、次のリリヌスで行う倉曎は次のずおりです。

@yesmeck

3.11.xですか 3.10.4含たれおいないようです。

@ johnernaut 12888

ずりあえずv3.8.4に戻るず、3.9.0以降のバヌゞョンはパッケヌゞ化された埌は倧きすぎたす。䞊蚘の神々が蚀及したバヌゞョンは䞀時的な解決策にすぎたせん。アむコンを非同期でロヌドする次のバヌゞョンを楜しみにしおいたす。

@yesmeckに感謝し

たた、 create-react-app v2およびcraco甚のAntDesignプラグむンを公開したこずにも蚀及したいず思いたす。 これがGitHubのcraco-antdプラグむンです

Ant Design IconsセクションからLargeBundle SizeをREADMEに远加したした。この問題およびPR に泚目したす。


module.exports = {
  resolve: {
    alias: {
      "@ant-design/icons-angular/icons": "/path/to/node_modules/@ant-design/icons-angular/esm2015/icons/ant-design-icons-angular-icons.js"
    }
  }
}

この問題を玹介する耇補リポゞトリを䜜成しここにある元のng-zorro-antd統合の䟋から倉曎されおおり、 DllPluginは、フラット化されたESモゞュヌルのツリヌシェむクを圹に立たないようにしおいたす。

DllPluginがない堎合は、期埅どおりに機胜したす。

これは、webpackがフラット化されたesモゞュヌルでツリヌシェむクを行わないこずに関するいく぀かの歎史的背景です。 圌らが蚀及しおいるこずは、 DllPluginいく぀かの゚ッゞケヌスを陀いお、最近のリリヌスでほずんど修正されおいるず思いたす。

興味深いこずに、webpackがDllPluginでのツリヌシェむクをサポヌトするのは、5月になっおentryOnly: trueを远加したしたが、運がありたせん。 もっず孀立した䟋をドラフトしお、webpackに問題を提起したす。

線集耇補リポゞトリず歎史的な問題を远加したした。

話の終わり耇補リポゞトリを停造するのはここです。 webpack 3.5.6は、 entryOnly: trueサポヌトがないず叀すぎたす。 そのため、 fesm5モゞュヌルはツリヌシェむクされたせん。

ng-zorro-antdをdllベンダヌにバンドルしたい人のために

  • webpack > = 4.9.0の堎合は、 DllPlugin構成にentryOnly: trueを远加したす。
  • それ以倖の堎合は、この蚭定をwebpack構成に远加したす
module.exports = {
  resolve: {
    alias: {
      "@ant-design/icons-angular/icons": "/path/to/node_modules/@ant-design/icons-angular/esm2015/icons/ant-design-icons-angular-icons.js"
    }
  }
}

@issuehuntfestは、この問題に$ 200.00の資金を提䟛したした。 IssueHuntでご芧ください

フォントファむルをパッケヌゞ化に参加させおロヌカルにむンポヌトするこずはできたせんか倧きすぎる

この問題を最適化する公匏の蚈画はありたすか 3.8より前のバヌゞョンず同様のロヌカルsvg゜リュヌションを提䟛できたすか

改善を楜しみにしおいたす

公匏の解決策はありたすか

@fuhaiwei次のバヌゞョンたで、アむコンを盎接゚クスポヌトしお回避策に぀いおこのコメントを確認しおくださいhttps://github.com/ant-design/ant-design/issues/12011#issuecomment -423173228

珟圚、 webpack.resolve.alias 、 antd/es/iconをカスタムコンポヌネントwebpack.resolve.alias眮き換えおいたす。
アセンブリは<Icon /> a props.typeおよびprops.themeが指定されたAPIに送信されたす。
このようにしお、䜿甚されたすべおのアむコンデヌタをペヌゞテスト䞭に蚘録できたす。
次に、デヌタずhttps://github.com/ant-design/ant-design/issues/12011#issuecomment-423173228に基づいお、 icons.js自動的に生成されたす。
より良い解決策を芋぀けるこずを願っおいたす。


珟圚、 webpack.resolve.aliasを䜿甚しおantd/es/iconをカスタムコンポヌネントに眮き換えおいたす。
そのコンポヌネントは、指定されたAPIにprops.typeずprops.themeの<Icon />を送信したす。
これにより、ペヌゞテスト䞭に䜿甚されたすべおのアむコンデヌタを蚘録できたす。
次に、デヌタずhttps://github.com/ant-design/ant-design/issues/12011#issuecomment-423173228に基づいお、 icons.js自動的に生成したす。
より良い解決策を芋぀けるこずを願っおいたす。

3か月が経過したしたが、圓局はオンデマンドでロヌドする方法を芋぀けたしたか

image

導入方法から始めるのが䞀番いいず思いたすし、玠材のようにすべおの構成芁玠を別々に匕甚するのもいいですね。 。これで、組み蟌みのアむコンを䜿甚できるコンポヌネントのみがパッケヌゞ化されたした。 。

Iconコンポヌネントが䜿甚されおいない堎合、@ ant-desigin / iconsパッケヌゞもロヌドされたす

Iconコンポヌネントが䜿甚されおいない堎合、@ ant-desigin / iconsパッケヌゞもロヌドされたす

Datepickerも䜿甚されたす。コヌドにそのようなものがあるかどうかを確認しおください。 メニュヌも䜿甚されたす

500KBを超えるず倧きすぎたす

楜しみにしおいたのですが、もずもず最新バヌゞョンに切り替えおいたのですが、パッケヌゞがずおも倧きいのを芋お、たた戻るのが怖かったです。

SVG圢匏を䜿甚したくないのですが、柔軟に構成できたすか svgを䜿甚するかどうかを構成する

単䞀のアむコンのみを参照する方法を提䟛でき、antdのすべおの内郚コンポヌネントはこの方法を䜿甚するように曎新されたす。

import Search from 'antd/icons/Search";

<Search />

既存のプロゞェクトずの互換性のために、 import { Icon } from 'antd';匕き続き予玄されおいたすが、 import { Icon } from 'antd';が䜿甚されおいる限り、アむコンの党量がむンポヌトされたす。

2階で同意する

完璧な解決策を埅っおいるマヌク

500kアむコン、解決策はありたすか

誰かがこれに぀いお英語で私を曎新できたすか 500kbは私のバンドルの4分の1です。 私はwebpackを䜿甚しおおり、次のようにアむコンをむンポヌトしおいたす。

import Icon from 'antd/lib/icon';
<Icon type="logout" />

私はそれらをむンポヌトするさたざたな方法を詊し、アむコンのむンポヌトをすべお削陀するこずさえ詊みたしたが、私が䜕をしおも500kbが残っおいるようです。 私はwebpackを䜿甚しおおり、区画の実隓スコヌプの巻き䞊げ機胜を䜿甚しおアむコンを適切にツリヌシェむクするこずができたしたが、他の20か所でアプリが砎損するため䜿甚できたせん。

人々はこの問題をどのように扱っおいたすか ここにいる党員が500kbを远加しおプロゞェクトを出荷しおいるだけですか、それずも私が無芖しおいる明らかな回避策ですか

そのようにむンポヌトするず、暙準のWebpackビルドで機胜したすか

import Star from 'antd/icons/star';
誰かが私を曎新するこずができれば、私はそれを本圓に感謝したす。

@ApolloGun回避策はこのスレッドで数回参照されおおり、すべおがこのコメントにありたす https 

それが機胜する方法は、Webpackに別の堎所からアむコンを解決するように指瀺するこずです。具䜓的には、䜿甚したいアむコンを正確に゚クスポヌトする新しいファむルです。 これを行った埌、アむコンは通垞どおり機胜し、コンポヌネントを倉曎する必芁はありたせん。

私はアむコンを䜿甚しおいたせんが、それでもその巚倧なファむルを取埗したす。 たぶん、antdのコンポヌネントはそれを内郚で䜿甚しおいたす。 コンポヌネントで䜿甚されおいるアむコンを確認するにはどうすればよいですか。 これは、遞択、ドロップダりンなどのカスタムアむコンでAntdアむコンを眮き換えるための良い方法のようです。

私はアむコンを䜿甚しおいたせんが、それでもその巚倧なファむルを取埗したす。 たぶん、antdのコンポヌネントはそれを内郚で䜿甚しおいたす。 コンポヌネントで䜿甚されおいるアむコンを確認するにはどうすればよいですか。 これは、遞択、ドロップダりンなどのカスタムアむコンでAntdアむコンを眮き換えるための良い方法のようです。

@HeskeyBaoziは、webpack゚むリアスを䜿甚しお、antdコンポヌネントで䜿甚されるアむコンのリストを䜜成したした。
https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demo/blob/master/src/icons.js#L10 -L100
この方法を理解するには、問題の説明党䜓をお読みください。

@ApolloGun珟圚、公匏の解決策はありたせん。
プルリク゚スト12888はただ進行䞭です。

@ yesmeck 、 @ afc163これをすぐに閉じる予定はありたすか

@HeskeyBaozi @ afc163 、あなたが曞いたこの新しいものをどのように䜿甚したすか 

@HeskeyBaoziなぜ皆さんがこれに取り組んでいないのか聞いおもいいですか 5ヶ月以䞊経ちたした。 皆さんはこれを優先床が䜎いず思いたすか

@HeskeyBaoziなぜ皆さんがこれに取り組んでいないのか聞いおもいいですか 5ヶ月以䞊経ちたした。 皆さんはこれを優先床が䜎いず思いたすか

同意したす、それは本圓に迷惑です=

コヌド怜査の埌にantd 、私が芋おいるそのコンポヌネントなどButton茞入Icon 、ひいおは茞入に生成されたコヌドに応じお

// import everything here
import * as allIcons from '@ant-design/icons/lib/dist';

//...

// use everything here :(
ReactIcon.add.apply(
  ReactIcon,
  _toConsumableArray(
    Object.keys(allIcons).map(function(key) {
      return allIcons[key];
    })
  )
);

これにより、ツリヌシェむクが倱敗し、すべおのアむコンがむンポヌトされたす。 むンポヌトを@ant-design/icons/lib/index.es.jsポむントし、必芁になるたですべおのアむコンで操䜜を実行しないこずを怜蚎しおください。 たた、この行の履歎を確認しおください //github.com/ant-design/ant-design/blob/master/components/icon/index.tsx#L3時間の経過ずずもに少し倉化しおいたす。

これにより、プロゞェクト党䜓が盎接利甚できなくなりたす

@poorel 、

<Icon />は、デフォルトでアむコンラむブラリを完党に導入したす。ランタむムにどのようなアむコンを導入するかわからないためです。以前は、アむコンはiconfont.cnホストされおいたため、パッケヌゞングの認識はありたせん。

これには、䞀時的な蚈画に぀いおの詳现な議論が必芁です。 12011コメントを参照しおください。

この゜リュヌションは匕き続き䜿甚できたす。テストしたしたが、プロゞェクトに含たれるアむコンを敎理する必芁がありたす。これはもう少し面倒です。

ただし、プロゞェクトに含たれるアむコンを敎理する必芁がありたす...

以前読んでみたずころ、アむコンの参照の倚くはantd独自のコンポヌネントで䜜成されおおり、その数は少なくありたせん。ビゞネスで盎接匕甚したものは非垞に少ないですが、コンポヌネントが参照されおいる可胜性があるこずを考えるず、数を数えるのは簡単ではありたせん。

@chenyongええず、その卵が痛い。 。 。

@aryzingあなたのアプロヌチは魅力的に聞こえたす。 12888よりも劎力が少なくなりたすか そのPRには、あたりにも倚くの重倧な倉曎が含たれおいたす。おそらく、それが数か月経っおもただ完了しおいない理由の1぀です。

@ zachguo 

䞀郚のantdコンポヌネントで䜿甚されるアむコンは、小道具に基づいお動的にレンダリングされたす぀たり、実行時に決定されたす。 たずえば、ButtonのAPIを芋おください。

<Button icon="search">Search</Button>

このコンポヌネントが正しくレンダリングされるためには、Buttonコンポヌネントたたは䜿甚される基になるIconコンポヌネントが実行時にすべおのアむコンにアクセスできる必芁があり、ツリヌの揺れを蚱可したせん。

解決策は、次のようなAPIを䜿甚するこずです。

import { 
  SearchIcon // not sure if this actually exists
} from '@antd/some-icons-package';

<Button icon={SearchIcon}>Search</Button> {/* option 1 - component */}
<Button icon={() => <SearchIcon />}>Search</Button> {/*option 2 - render prop */}

このシナリオでは、必芁なものだけをむンポヌトしおいるので、ツリヌシェむクを開始しお、䟋@antd/some-icons-packageからの未䜿甚の゚クスポヌトをすべお削陀できたす。

この問題は半幎以䞊続いおおり、ただ公匏の解決策はありたせん。私が珟圚䜿甚しおいる解決策は、非同期ロヌドにimport()を䜿甚するこずです。
この問題は半幎以䞊経過しおおり、ただ正匏な解決策はありたせん。珟圚䜿甚しおいる解決策は、非同期読み蟌みにimport()を䜿甚するこずです。

Reactのロヌド可胜なコンポヌネントを䜿甚しおください。
Reactのロヌド可胜なコンポヌネントを䜿甚しおください。

import React from 'react';
import ReactDOM from 'react-dom';
import { Icon } from 'antd';

ReactDOM.render(
  <Icon type="github" />,
  document.getElementById('root')
);

image

image

  • 最初のステップは、䟝存関係をむンストヌルするこずです @loadable/componentおよび@babel/plugin-syntax-dynamic-import 。
    最初のステップは、䟝存関係をむンストヌルするこずです @loadable/componentおよび@babel/plugin-syntax-dynamic-import 。
  • 2番目のステップは、プロゞェクトのルヌトディレクトリにフォルダiconsを䜜成し、スクリプトを䜿甚しお@ant-design/icons内のすべおのアむコンを゚クスポヌトするこずです。
    2番目のステップは、プロゞェクトルヌトにフォルダヌiconsを䜜成し、スクリプトを䜿甚しお@ant-design/icon内のすべおのアむコンを゚クスポヌトするこずです。

    #!/usr/bin/env node
    const fs = require('fs');
    const path = require('path');
    const util = require('util');
    const icons = require('@ant-design/icons');
    
    const fsMkdir = util.promisify(fs.mkdir);
    const fsWriteFile = util.promisify(fs.writeFile);
    
    // https://github.com/ant-design/ant-design-icons/blob/master/packages/icons-react/src/utils.ts#L94-L108
    const mapping = {
    fill: 'fill',
    outline: 'o',
    twotone: 'twotone',
    };
    const saveFlag = { encoding: 'utf8', mode: 0o644, flag: 'w' };
    
    (async () => {
    const dir = path.join(__dirname, 'icons');
    await fsMkdir(dir, 0o755);
    const processes = Object.values(icons).map(value => {
      if (value && value.name && value.theme) {
        // https://github.com/ant-design/ant-design-icons/blob/master/packages/icons-react/src/components/Icon.tsx#L38-L42
        const file = path.join(dir, `${value.name}-${mapping[value.theme]}.js`);
        const data = `export default ${JSON.stringify(value)}`;
        return fsWriteFile(file, data, saveFlag);
      }
    });
    await Promise.all(processes);
    })();
    

    ノヌドを䜿甚しおプロゞェクトの盎䞋でこのスクリプトを実行し、 @ant-design/iconsに゚クスポヌトされたすべおのアむコンをiconsディレクトリに保存したす。
    ノヌドを䜿甚しおプロゞェクトの盎䞋でこのスクリプトを実行し、 @ ant-design/iconsから゚クスポヌトされたすべおのアむコンをiconsフォルダヌに保存したす。

  • 3番目のステップは、Antdコヌドリポゞトリ内のcomponents / icon / index.tsxをプロゞェクトルヌトディレクトリにコピヌし、 Icon.jsxたたはIcon.jsずいう名前を付けおから、コヌド内のTypeScriptタむプ定矩を削陀しお玔粋にするこずです。 JavaScriptコヌド。 プロゞェクトでTypeScriptを䜿甚しおいる堎合は、 Icon.tsxたたはIcon.tsずいう名前を盎接付けるこずもできるため、タむプ定矩を削陀する必芁はありたせん
    3番目のステップでは、Antdコヌドリポゞトリのcomponents / icon / index.tsxをプロゞェクトルヌトにコピヌし、 Icon.jsxたたはIcon.jsずいう名前を付けおから、コヌド内のTypeScriptタむプ定矩を次のように削陀したす。玔粋なJavaScriptコヌドを取埗したすプロゞェクトでTypeScriptを䜿甚しおいる堎合は、 Icon.tsxたたはIcon.tsずしお盎接名前を付けるこずもできるため、タむプ定矩を削陀する必芁はありたせん
    次に、このコヌドファむルを倉曎し、 import()ず@loadable/componentを䜿甚しお、オンデマンドでアむコンファむルをロヌドしたす。
    次に、コヌドファむルを倉曎し、 import()ず@loadable/componentを䜿甚しお、必芁に応じおアむコンファむルをロヌドしたす。

    diff -- a/Icon.tsx b/Icon.jsx
    --- a/Icon.tsx
    +++ b/Icon.jsx
    @@ -1,70 +1,29 @@
    import * as React from 'react';
    import classNames from 'classnames';
    -import * as allIcons from '@ant-design/icons/lib/dist';
    +import loadable from '@loadable/component';
    import ReactIcon from '@ant-design/icons-react';
    -import createFromIconfontCN from './IconFont';
    +import createFromIconfontCN from 'antd/es/icon/IconFont';
    import {
    svgBaseProps,
    withThemeSuffix,
    removeTypeTheme,
    getThemeFromTypeName,
    alias,
    -} from './utils';
    +} from 'antd/es/icon/utils';
    -import warning from '../_util/warning';
    +import warning from 'antd/es/_util/warning';
    -import LocaleReceiver from '../locale-provider/LocaleReceiver';
    +import LocaleReceiver from 'antd/es/locale-provider/LocaleReceiver';
    -import { getTwoToneColor, setTwoToneColor } from './twoTonePrimaryColor';
    +import { getTwoToneColor, setTwoToneColor } from 'antd/es/icon/twoTonePrimaryColor';
    +
    +const AllIcons = loadable.lib(props => import(
    +  /* webpackChunkName: "icons/icon-" */
    +  `./icons/${props.type}.js`
    +));
    
    // Initial setting
    -ReactIcon.add(...Object.keys(allIcons).map(key => (allIcons as any)[key]));
    setTwoToneColor('#1890ff');
    -let defaultTheme: ThemeType = 'outlined';
    +let defaultTheme = 'outlined';
    -let dangerousTheme: ThemeType | undefined = undefined;
    +let dangerousTheme = undefined;
    -
    -export interface TransferLocale {
    -  icon: string;
    -}
    -
    -export interface CustomIconComponentProps {
    -  width: string | number;
    -  height: string | number;
    -  fill: string;
    -  viewBox?: string;
    -  className?: string;
    -  style?: React.CSSProperties;
    -  spin?: boolean;
    -  rotate?: number;
    -  ['aria-hidden']?: string;
    -}
    -
    -export type ThemeType = 'filled' | 'outlined' | 'twoTone';
    -
    -export interface IconProps {
    -  tabIndex?: number;
    -  type?: string;
    -  className?: string;
    -  theme?: ThemeType;
    -  title?: string;
    -  onKeyUp?: React.KeyboardEventHandler<HTMLElement>;
    -  onClick?: React.MouseEventHandler<HTMLElement>;
    -  component?: React.ComponentType<CustomIconComponentProps>;
    -  twoToneColor?: string;
    -  viewBox?: string;
    -  spin?: boolean;
    -  rotate?: number;
    -  style?: React.CSSProperties;
    -  prefixCls?: string;
    -  role?: string;
    -}
    -
    -export interface IconComponent<P> extends React.SFC<P> {
    -  createFromIconfontCN: typeof createFromIconfontCN;
    -  getTwoToneColor: typeof getTwoToneColor;
    -  setTwoToneColor: typeof setTwoToneColor;
    -  unstable_ChangeThemeOfIconsDangerously?: typeof unstable_ChangeThemeOfIconsDangerously;
    -  unstable_ChangeDefaultThemeOfIcons?: typeof unstable_ChangeDefaultThemeOfIcons;
    -}
    -
    -const Icon: IconComponent<IconProps> = props => {
    +const Icon = props => {
    const {
      // affect outter <i>...</i>
      className,
    @@ -107,7 +66,7 @@
      [`anticon-spin`]: !!spin || type === 'loading',
    });
    
    -  let innerNode: React.ReactNode;
    +  let innerNode;
    
    const svgStyle = rotate
      ? {
    @@ -116,7 +75,7 @@
        }
      : undefined;
    
    -  const innerSvgProps: CustomIconComponentProps = {
    +  const innerSvgProps = {
      ...svgBaseProps,
      className: svgClassString,
      style: svgStyle,
    @@ -165,12 +124,19 @@
        dangerousTheme || theme || defaultTheme,
      );
      innerNode = (
    -      <ReactIcon
    -        className={svgClassString}
    -        type={computedType}
    -        primaryColor={twoToneColor}
    -        style={svgStyle}
    -      />
    +      <AllIcons type={computedType}>
    +        {({ default: loadedIcon }) => {
    +          ReactIcon.add(loadedIcon);
    +          return (
    +            <ReactIcon
    +              className={svgClassString}
    +              type={computedType}
    +              primaryColor={twoToneColor}
    +              style={svgStyle}
    +            />
    +          );
    +        }}
    +      </AllIcons>
      );
    }
    
    @@ -181,7 +147,7 @@
    
    return (
      <LocaleReceiver componentName="Icon">
    -      {(locale: TransferLocale) => (
    +      {locale => (
          <i
            aria-label={type && `${locale.icon}: ${type}`}
            {...restProps}
    @@ -196,7 +162,7 @@
    );
    };
    
    -function unstable_ChangeThemeOfIconsDangerously(theme?: ThemeType) {
    +function unstable_ChangeThemeOfIconsDangerously(theme) {
    warning(
      false,
      'Icon',
    @@ -206,7 +172,7 @@
    dangerousTheme = theme;
    }
    
    -function unstable_ChangeDefaultThemeOfIcons(theme: ThemeType) {
    +function unstable_ChangeDefaultThemeOfIcons(theme) {
    warning(
      false,
      'Icon',
    
  • 最埌のステップは、Webpackを構成するこずです。
    最埌のステップは、Webpackを構成するこずです。
    `` `diff
    diff-a / webpack.js b / webpack.js
    --- a / webpack.js
    +++ b / webpack.js
    @@ -1,4 +1,5 @@
    const path = require 'path';
    + const webpack = require 'webpack';
    const HtmlWebpackPlugin = require 'html-webpack-plugin';
    const TerserPlugin = require 'terser-webpack-plugin';

    @@ -33,12 +34,16 @@
    プラグむン[
    新しいHtmlWebpackPlugin{
    タむトル「玠晎らしいペヌゞ」、
    テンプレヌトpath.join__ dirname、 'public / index.html'、
    メタ{
    ビュヌポヌト 'width = device-width、initial-scale = 1'、
    }、
    ハッシュtrue、
    }、

    • 新しいwebpack.NormalModuleReplacementPlugin
    • /node_modules\/antd\/es\/icon\/index.js/、
    • path.resolve__ dirname、 'Icon.jsx'
    • 、
      ]、
      解決{
      モゞュヌル['node_modules']、
      @@ -56,13 +61,14 @@
      䜿甚する [{
      ロヌダヌ 'babel-loader'、
      オプション{
      プリセット[
      ['@ babel / prefix-env'、{タヌゲット '> 2.486、死んでいない'}]、
      '@ babel / prefix-react'、
      ]、
      プラグむン[
    • ['@ babel / plugin-syntax-dynamic-import']、
      ['@ babel / plugin-proposal-class-properties']、
      ['import'、{libraryName 'antd'、libraryDirectory 'es'、styletrue}]、
      ]、
      }、
      }]

      `` `

この゜リュヌションの利点は、すべおのアむコンを保持でき、アむコンの䞍足を心配するこずなく、構成可胜な背景管理システムでアむコンを任意に倉曎できるこずです。アむコンはオンデマンドで読み蟌たれ、特定のペヌゞのアむコンがレンダリングされたずきにのみ読み蟌たれたす。察応するアむコンファむル。ロヌドする必芁があるのは、パッケヌゞ化されたむンデックスの玄50Kのアむコンリストデヌタだけです Icon.jsxのWebpackマゞックコメントで短い名前を指定するず、サむズを小さくできたす。
この゜リュヌションの利点は、すべおのアむコンを保持できるこず、欠萜しおいるアむコンを気にせずに構成可胜なバックグラりンド管理システムでアむコンを倉曎できるこず、およびアむコンがオンデマンドでロヌドされるこずです。レンダリングに必芁なアむコンのみがロヌドされたす。特定のペヌゞのレンダリングを開始したずき。ロヌドする必芁のあるパッケヌゞ化されたむンデックスファむルには、玄50Kのアむコンリストデヌタしかありたせん Icon.jsxのWebpackマゞックコメントで短い名前を指定するず、このサむズを枛らすこずができたす。

この゜リュヌションの欠点は、各アむコンにアむコンの内容に加えお远加のWebpackモゞュヌル情報が含たれおいるため、iconsフォルダヌのサむズが、パッケヌゞ化された単䞀ファむルのサむズに加えお、むンデックスの50Kよりもはるかに倧きいこずがわかりたす。アむコンリストのデヌタは、実際には3Mに近いサむズでパックされおいたす。ただし、実際に前埌に䜿甚できるアむコンは数個たたは数十個しかないため、ナヌザヌのブラりザによっおダりンロヌドされるデヌタの量はそれほど倚くはなく、1぀のペヌゞに同時に衚瀺されるアむコンの数がない限り、非同期で読み蟌たれたす。さらに、ロヌド速床にはほずんど圱響したせん。
この゜リュヌションの欠点は、各アむコンにアむコンの内容に加えおWebpackモゞュヌル情報が含たれおいるため、 iconsフォルダヌのサむズが以前にパッケヌゞ化された単䞀ファむルのサむズよりもはるかに倧きいこずです。むンデックスファむル内の50Kのアむコンリストデヌタ、実際のパッケヌゞサむズは3Mに近いです。ただし、実際に䜿甚できるアむコンは数個たたは数十個しかないため、ナヌザヌのブラりザによっおダりンロヌドされるデヌタの量はそれほど倚くありたせん。 、非同期で読み蟌たれるため、1ペヌゞに衚瀺されるアむコンの数が倚くない限り、読み蟌み速床ぞの圱響は倧きくありたせん。

@ jinliming2はクヌルな倉曎ですが、webpackむンポヌトが実際に倉数を枡すこずができるこずを芋぀けるだけです

webpackには少なくずもいく぀かのファむルの堎所情報が必芁なため、importfooなどの完党に動的なステヌトメントは倱敗したす。これは、fooがシステムたたはプロゞェクト内の任意のファむルぞのパスである可胜性があるためです。importには少なくずもいく぀かのファむルが含たれおいる必芁がありたす。モゞュヌルが配眮されおいる堎所に関する情報。したがっお、バンドルを特定のディレクトリたたはファむルのセットに制限できたす。

実際には、ディレクトリのプレフィックスがある限り、以前は受け入れられたせんでした。
そうは蚀っおも、antdナヌザヌはwebpackを䜿甚するだけでなく、少し恥ずかしいこずです。

@aryzing提案されたAPIのオプション1は、実際には12888が達成しようずしおいるもののようです。 倚くの重倧な倉曎が含たれるため、おそらくAntDesignチヌムがそれを完了するのを埅぀必芁がありたす。

xhrを䜿甚しおsvgを非同期にロヌドするこずを怜蚎できたすか
アヌチャヌ-svgs

ant deisgn自䜓がより倚くのアむコンを䜿甚するため、 囟标文件を非同期ロヌドスキヌムに倉曎しお、メむンファむルボリュヌムを占有しないようにするこずを怜蚎しおください。これを参照できたす。

ant deisgn自䜓はより倚くのアむコンを䜿甚するため、アむコンファむルを非同期ロヌドスキヌムに倉曎しお、メむンファむルサむズを占有する必芁がないようにするこずを怜蚎しおください。これを参照できたす。

webpack-ant-icon-loader

@rororofffはこの問題に$ 2.00の資金を提䟛したした。


  • この報酬を受け取るには、 IssueHuntを介しおプルリク゚ストを送信しお
  • 貢献したいですか IssueHuntを介しおこの問題にチップむンしたす。
  • IssueHunt Issue Explorerをチェックしお、資金提䟛されおいる問題を確認しおください。
  • 開発者の助けが必芁ですか IssueHuntにリポゞトリを

この䌚話の長さに怯えおいお、create-react-appずant-designを䜿いたいだけの人のために、私はここで定型プロゞェクトを䜜成したしたhttps://github.com/AustinGreen/cra-antd-starter

これには、アむコンバンドルサむズの問題の修正ず、むゞェクトなしのカスタムWebpack構成が含たれたす。 @ ndbroadbent 、 @ patricklafrance 、そしおant-designチヌム党䜓の懞呜な努力に感謝したす。

この䌚話の長さに怯えおいお、create-react-appずant-designを䜿いたいだけの人のために、私はここで定型プロゞェクトを䜜成したしたhttps://github.com/AustinGreen/cra-antd-starter

これには、アむコンバンドルサむズの問題の修正ず、むゞェクトなしのカスタムWebpack構成が含たれたす。 @ ndbroadbent 、 @ patricklafrance 、そしおant-designチヌム党䜓の懞呜な努力に感謝したす。

Nextjsアプリでどのように䜿甚できたすか

@AustinGreen私はあなたの䟋を詊したした。

image

サむドバヌずボタンが1぀あり、サむズが玄100kBのアプリの堎合、Gzip圧瞮はただ倚すぎたす。

@anjmaoバンドルサむズをさらに瞮小する方法がある堎合は、お知らせください。远加したす。゚ンタヌプラむズWebアプリケヌションを構築しおいる堎合は、フロント゚ンドフレヌムワヌク甚に最倧100kB Gzipで圧瞮され、最倧5぀のコンポヌネント包括的なコンポヌネントラむブラリ、アむコン、およびその他のナヌティリティはかなり暙準的です。

@anjmaoバンドルサむズをさらに瞮小する方法がある堎合は、お知らせください。远加したす。゚ンタヌプラむズWebアプリケヌションを構築しおいる堎合は、フロント゚ンドフレヌムワヌク甚に最倧100kB Gzipで圧瞮され、最倧5぀のコンポヌネント包括的なコンポヌネントラむブラリ、アむコン、およびその他のナヌティリティはかなり暙準的です。

https://github.com/ant-design/ant-design/issues/12011#issuecomment-420038579 。 これが良い解決策です

@ Oscar-renプロゞェクトはすでにアむコンの゚むリアスを䜿甚しおいたすこれがバンドルサむズが〜400kBではなく〜100kBである理由です

@tobiaslins前回のコメント以降
これをNuxtプロゞェクトで䜿甚するず、クラむアントずサヌバヌサむドのレンダリングが同期しなくなりたす。
The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.

参考たでに、webpack゚むリアスを䜿甚しおバンドルサむズを瞮小するVueのバヌゞョン
https://github.com/atjason/ant-design-vue-demo

参照
https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demo

Hello Worldパッケヌゞサむズ

image

ant deisgn自䜓がより倚くのアむコンを䜿甚するため、 囟标文件を非同期ロヌドスキヌムに倉曎しお、メむンファむルボリュヌムを占有しないようにするこずを怜蚎しおください。これを参照できたす。

ant deisgn自䜓はより倚くのアむコンを䜿甚するため、アむコンファむルを非同期ロヌドスキヌムに倉曎しお、メむンファむルサむズを占有する必芁がないようにするこずを怜蚎しおください。これを参照できたす。

webpack-ant-icon-loader

埌䞖のために、これはReactでのみ機胜したす。

こんにちは、 @ jinliming2゜リュヌションはい぀リリヌスされたすか
webpack-ant-icon-loaderが機胜したせん。

こんにちは、䜿甚に関する情報を提䟛できたすか
webpack-ant-icon-loaderあなたず
私がそれを解決するのを手䌝うこずができるかどうか芋おみたしょう。

こんにちは@ beven91

以前にいく぀かのテストを実行したしたが、機胜せず、実行できたせんでした
理由を理解しおください。 しかし、あなたの質問により、私はケヌスを
専甚プロゞェクト私はあなたずこれを瀺すためにサンプルテストを䜜成したした
それがうたくいった時間 結果のバンドルから垞に1.21Mbを節玄しおいたす
デモプロゞェクトず取り組んでいるプロゞェクトの䞡方から玠晎らしい
商業的に。

他の誰かが同じものを持っおいる堎合に備えお、ここにサンプルプロゞェクトを投皿しおいたす
問題
https://github.com/vladimirmoushkov/ant-icons-webpack-loade-test/#readme

webpack-ant-icon-loaderがないず、次の結果が埗られたす。
bundle.development.js 4.59MiBアプリ[攟出]アプリ

webpack-ant-icon-loaderを䜿甚するず、次のようになりたす。
../../index.html555バむト[攟出]
0.bundle.development.js 1.21 MiB 0 [攟出]
bundle.development.js 3.41MiBアプリ[攟出]アプリ

泚意事項のカップル

  • 生成された0.bundle.development.jsを削陀するずより良いず思いたす
    アヌティファクト。
  • アむコンは最終補品から消えたす。぀たり、ペヌゞに衚瀺されたせん。 umirc.jsの蚭定を芋たしたが、react-routerを䜿甚しおいたす。 どうすればそれらを再衚瀺させるこずができたすか

金、2019幎4月5日には2時38分PMにbeven91 [email protected]曞きたした

こんにちは、䜿甚に関する情報を提䟛できたすか
webpack-ant-icon-loaderず䞀緒ですか
私がそれを解決するのを手䌝うこずができるかどうか芋おみたしょう。

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/ant-design/ant-design/issues/12011#issuecomment-480244343 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AUPfoCCVrb5j4s8Qleju8LvdPsxC02FFks5vdzW7gaJpZM4WW7EA
。

https://github.com/AustinGreen/cra-antd-starter

あなたの゜リュヌション異なるが、Antが文曞化よりもどのように、単に奜奇心@AustinGreen react-app-rewiredずbabel-plugin-importここで説明する方法- https://ant.design/docs/react/use-with-create-react -アプリ

GitHub
createreactアプリずantデザむンを䜿甚するためのボむラヌプレヌト-AustinGreen / cra-antd-starter
゚ンタヌプラむズクラスのUIデザむン蚀語ずReactベヌスの実装ず高品質のReactコンポヌネントのセット、䌁業向けの最高のReactUIラむブラリの1぀

@annjawn create-react-app 2.0以降、react-app-rewiredは維持されなくなったため、私のプロゞェクトでは、CRA2.0のreact-app-rewiredを眮き換えるために䜜成されたcraco + craco-antdを䜿甚しおいたす。

@ Beven91私の前のコメントのこの郚分を手䌝っおくれたせんか。

  • アむコンは最終補品から消えたす。぀たり、ペヌゞに衚瀺されたせん。 umirc.jsの蚭定を芋たしたが、react-routerを䜿甚しおいたす。 どうすればそれらを再衚瀺させるこずができたすか

バンドル党䜓でアむコンが分離されおいるのは玠晎らしいこずですが、䜿甚されおいるアむコンは分離されたバンドルの䞀郚のたたなので、それらを䜿甚するず、分離が無意味になる別個のバンドルずしお含たれるこずになりたす。

@annjawn create-react-app 2.0以降、react-app-rewiredは維持されなくなったため、私のプロゞェクトでは、CRA2.0のreact-app-rewiredを眮き換えるために䜜成されたcraco + craco-antdを䜿甚しおいたす。

@AustinGreenは理にかなっおいたすが、

@vladimirmoushkov
遅れおすみたせん、私はそれを解決しようずしたす。

こんにちは@vladimirmoushkov

詳现はこちらをご芧ください。 ant-icons-webpack-loade-test1

修正されるたで私のために働いた䞀時的な解決策antd> = 3.9

  1. アむコンを異なる方法で解決するようにwebpackを適応させたす。 Webpack構成で
module.exports = {
  //...
  resolve: {
    alias: {
      "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
    }
  }
};
  1. icons.jsをフォルダsrc/たたは任意の堎所に䜜成したす。 ゚むリアスパスず䞀臎しおいるこずを確認しおください。
    このファむルでは、antdに含めるアむコンを定矩したす。 antdのSelectコンポヌネントに必芁なのは䞋向きアむコンだけです。
export {
  default as DownOutline
} from "@ant-design/icons/lib/outline/DownOutline";

config-overwrites.js内のreact-app-rewire create-react-appの倉曎でこれを行うこずも可胜です

これは、アむコンを䜿甚するAntコンポヌネントでは機胜したせん。 たずえば、アラヌトコンポヌネントはチェックアむコンず閉じるアむコンを䜿甚したすが、この゜リュヌションでは衚瀺されたせん

@ Venugopal46これらのアむコンantコンポヌネントで䜿甚されるをicons.js远加するこずもできたす。
私にずっおはうたくいきたす。

解決策に近づいおいるようです。 最埌に、ビルドプロセスの䞀郚ずしおicons.jsを自動生成するナヌティリティを䜜成できたす。

どのアむコンがantの独自のコンポヌネントを介しおむンポヌトされおいるかを正確に把握しお、それらをicons.jsに配眮するにはどうすればよいですか

私にずっお䞊蚘のハック

  1. アむコンを異なる方法で解決するようにwebpackを適応させたす。 Webpack構成で
module.exports = {
  //...
  resolve: {
    alias: {
      "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
    }
  }
};
  1. icons.jsをフォルダsrc/たたは任意の堎所に䜜成したす。 ゚むリアスパスず䞀臎しおいるこずを確認しおください。
    このファむルでは、antdに含めるアむコンを定矩したす。 antdのSelectコンポヌネントに必芁なのは䞋向きアむコンだけです。
export {
  default as DownOutline
} from "@ant-design/icons/lib/outline/DownOutline";

config-overwrites.js内のreact-app-rewire create-react-appの倉曎でこれを行うこずも可胜です

そしお、次のgenerateIconsList.shファむルを䜿甚しおsrc/icons.jsを生成したす。

grep -iR \<Icon\  ./src/ | cut -d: -f2 | sed -e s/.*\<Icon\ //g | sort | uniq | while read icon; do 
    theme='Outline';
    themelowercase="outline";
    if [[ $icon =~ ^.*twoTone.*$ ]]; then
        theme="TwoTone";
        themelowercase="twotone";
    fi
    if [[ $icon =~ ^.*fill.*$ ]]; then
        theme="Fill";
        themelowercase="fill";
    fi
    icon=$(echo $icon | sed -e 's/type\=\"//g'| sed -e 's/\".*//g' | sed -e 's/\-/ /g')
    icon=$(python -c "print('"$icon"'.title())")
    icon=$(echo $icon | sed -e 's/ //g')
    core_path="@ant-design/icons/lib/"$themelowercase"/"$icon$theme
    search_path="node_modules/"$core_path".js"
    if [ -e $search_path ]; then
        echo "export { default as "$icon$theme" } from \""$core_path"\";"
    fi
done | sort | uniq

プロゞェクトルヌトからgenerateIconsList.sh 2>/dev/null >src/icons.jsを実行するこずによっお-仕事をしたす 。
スクリプトは醜いハックであり、明らかに内郚アむコン参照や耇数行の<Icon />参照をキャッチしたせん。 私の堎合、いく぀かのアむコンケヌスを手動で远加する必芁がありたしたが、スクリプトはその仕事をしたすが、最終的には最終バンドルで1.1MB少なくなりたす。

どのアむコンがantの独自のコンポヌネントを介しおむンポヌトされおいるかを正確に把握しお、それらをicons.jsに配眮するにはどうすればよいですか

Webペヌゞにない衚瀺されおいないアむコンを远加しおいるだけですが、そこにあるはずです。 䜿甚しおいるantdのコンポヌネントの量によっお異なりたすが、私にずっおは、远加するのに玄10分かかりたした。 私は倚くのantdコンポヌネントを䜿甚しおいたすが

たずえば、テヌブルの゜ヌタヌ矢印が欠萜しおいる堎合

  1. antテヌブルを調べお、 <i aria-label="icon: caret-down" class="anticon anticon-caret-down ant-table-column-sorter-down off">を芋぀けたす。 この<i />タグが空であるこずがわかりたす。 ここで、アむコンの名前がcaret-downであるこずがわかりたす。
  2. @ant-design/icons/libフォルダヌでこのアむコンを芋぀け、 filledたたはoutlineフォルダヌ必芁なアむコンの皮類に応じおを遞択し、 icons.js新しいむンポヌトを远加したす。 
export { default as CaretDownOutline } from '@ant-design/icons/lib/outline/CaretDownOutline';

最善のアプロヌチではありたせんが、期埅どおりに機胜したす。 このような汚いハッキングを回避できるように、将来のリリヌスでこれを修正するant開発チヌムを楜しみにしおいたす。

こんにちは 

このテヌマに関するニュヌスはありたすか 次のantdのリリヌスの候補ですか
この問題を解決するためにいく぀かのこずを詊みたしたが webpack-ant-icon-loader 、 babel-import-plugin 、どれも機胜したせんでした。

ありがずう

本圓にこれに察する解決策が必芁です、バンドルサむズが倧きすぎたす

@zlab @nuintun @anjmaoヘルプが必芁な堎合は、 https //zlab.github.io/report.htmlに問い合わせおください。このペヌゞが生成するプラグむンは䜕ですか。自分のプロゞェクトを分析したい

私はそれを芋぀けたした、それはwebpack-bundle-analyzerです

モヌダルのみが䜿甚されたすが、500kアむコンラむブラリがパッケヌゞ化されおいたす

半幎以䞊経ちたしたが、進展はありたせんか

antdを攟棄しお、そのような重芁な問題は重芁ずマヌクされおいたせん...

オンデマンドでアむコンにパッケヌゞ化する必芁のあるファむルをロヌドしたす、500kb

Webpackに゚むリアスを远加し、icon.tsにアむコンを゚クスポヌトしたしたが、 npm start実行するず、゚ラヌが発生したした

ERROR in ./node_modules/antd/lib/icon/index.js
Module not found: Error: Can't resolve '@ant-design/icons/lib/dist' in 'xxx\node_modules\antd\lib\icon'

これは私のwebpack解決蚭定です

resolve: {
      modules: [path.resolve(__dirname, '../src'), 'node_modules'],
      alias: {
        '@ant-design/icons/lib/dist$': path.resolve(
          __dirname,
          '../src/utils/antdIcon.ts',
        ),
      },
      extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
      plugins: [
        new TsConfigPathsPlugin({
          tsconfig: path.resolve(__dirname, '../tsconfig.json'),
        }),
      ],
    },

1.アむコンアむコンはプロゞェクトで䜿甚されおいたせんが、パッケヌゞがあるのはなぜですか助けおください。
image
2. webpackexternalsの䜿甚= {'antd' 'antd'}はうたく機胜したせん。パッケヌゞ分析䞭にantdが衚瀺されたすか

1.アむコンアむコンはプロゞェクトで䜿甚されおいたせんが、パッケヌゞがあるのはなぜですか助けおください。
2. webpackexternalsの䜿甚= {'antd' 'antd'}はうたく機胜したせん。パッケヌゞ分析䞭にantdが衚瀺されたすか

@wiiler

  1. これを参照しおください、それはアむコンを参照するコンポヌネントである可胜性がありたす

    https://github.com/ant-design/ant-design/issues/12011#issuecomment -418003883
    実際、 <DatePicker /> 、 <Select />など、 <Icon />を䜿甚する組み蟌みコンポヌネントは、䜿甚時に完党に導入されたす。

  2. 倖郚を䜿甚する堎合は、babel-plugin-importプラグむンをオフにする必芁がありたす

Webpackに゚むリアスを远加し、icon.tsにアむコンを゚クスポヌトしたしたが、 npm start実行するず、゚ラヌが発生したした

ERROR in ./node_modules/antd/lib/icon/index.js
Module not found: Error: Can't resolve '@ant-design/icons/lib/dist' in 'xxx\node_modules\antd\lib\icon'

これは私のwebpack解決蚭定です

resolve: {
      modules: [path.resolve(__dirname, '../src'), 'node_modules'],
      alias: {
        '@ant-design/icons/lib/dist$': path.resolve(
          __dirname,
          '../src/utils/antdIcon.ts',
        ),
      },
      extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
      plugins: [
        new TsConfigPathsPlugin({
          tsconfig: path.resolve(__dirname, '../tsconfig.json'),
        }),
      ],
    },

これらの2぀の方法をお勧めしたす

@ As3ass1n
'../src/utils/antdIcon.ts'に '..'があるのはなぜですか webpack構成は別のディレクトリに配眮されおいたすか

1.アむコンアむコンはプロゞェクトで䜿甚されおいたせんが、パッケヌゞがあるのはなぜですか助けおください。
2. webpackexternalsの䜿甚= {'antd' 'antd'}はうたく機胜したせん。パッケヌゞ分析䞭にantdが衚瀺されたすか

@wiiler

  1. これを参照しおください、それはアむコンを参照するコンポヌネントである可胜性がありたす
    > 12011コメント
    >実際、 <DatePicker /> 、 <Select />など、 <Icon />を䜿甚する組み蟌みコンポヌネントは、䜿甚時に完党に導入されたす。
  2. 倖郚を䜿甚する堎合は、babel-plugin-importプラグむンをオフにする必芁がありたす

了解したした、ありがずう

Webpackに゚むリアスを远加し、icon.tsにアむコンを゚クスポヌトしたしたが、 npm start実行するず、゚ラヌが発生したした

ERROR in ./node_modules/antd/lib/icon/index.js
Module not found: Error: Can't resolve '@ant-design/icons/lib/dist' in 'xxx\node_modules\antd\lib\icon'

これは私のwebpack解決蚭定です

resolve: {
      modules: [path.resolve(__dirname, '../src'), 'node_modules'],
      alias: {
        '@ant-design/icons/lib/dist$': path.resolve(
          __dirname,
          '../src/utils/antdIcon.ts',
        ),
      },
      extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
      plugins: [
        new TsConfigPathsPlugin({
          tsconfig: path.resolve(__dirname, '../tsconfig.json'),
        }),
      ],
    },

これらの2぀の方法をお勧めしたす

@ As3ass1n
'../src/utils/antdIcon.ts'に '..'があるのはなぜですか webpack構成は別のディレクトリに配眮されおいたすか

すみたせん、それは私のせいです。 間違ったファむル名を曞き蟌んだのですが、゚むリアスを䜿甚しお解決したした。 ありがずう

この問題は将来解決されないのでしょうか 400k近く増加

こんにちは、それがい぀解決されるかに぀いお少なくずも倧たかな時間の芋積もりを提䟛するこずは可胜ですか

image

バンドルに490kbを远加するず、 Icon実質的に䜿甚できなくなりたす。 これはかなり倧きな問題ですが、これに察する修正をリリヌスするたでに実行できる䞀時的な修正はありたすか

@smddzcyはスレッドを読みたしたか

@ schester44さたざたな蚀語で曞かれたスレッドで アルファベット、あるいは音節文字を蚀うずころだったが、スクリプトたで行かなければならないず思う 蚀語孊が通垞蚀語に限定されおいる人にずっおはかなり難しいず思う䜕が起こっおいるのかを完党に明確にするために、゚トルリア語から掟生したアルファベットに制限されおいたす。

こんにちは皆さん、私は非垞に単玔なpurched-antd-iconsパッケヌゞの実装で成功したしたが、それは完党に手動です。 DOMを調べお、欠萜しおいるアむコンを調敎するために3〜4時間いじくり回しおいるず掚定したす。 これは、開発/リリヌスサむクルの最埌の段階で実装する予定です。 パッケヌゞ化された/オフラむンファヌストのアプリケヌションの堎合、唯䞀の問題は、非垞に控えめなiOS WKWebviewRAMの制限に近づくこずです。 私たちにずっお、iOSモバむルプロファむルが匕き続きアヌティファクトを瀺さない堎合は、これを完党に無芖したす。 ここでは進展がないので、私の奜みは、この新しいIcon APIが棚䞊げされ、叀いAPIが埩掻するのを芋るこずです。

@ afc163 、

2018幎9月15日に曞いたものは、良い解決策のように思えたす以䞋のGoogle翻蚳。 これがい぀実装されるかに぀いおの芋積もりを提䟛できたすか

叀い䜿甚法を保持し、コン゜ヌルに譊告ず移行のメッセヌゞを远加したす。

import { Icon } from 'antd';
<Icon type="star" />

次のようなプロバむダヌの新しいAPI

import Star from 'antd/icons/Star';
import Setting as SettingIcon from 'antd/icons/Setting';

<Star />
<SettingIcon />

そしお、ツリヌシェむク可胜な方法も

import { Icon: { Star, Setting } } from 'antd';

<Star />
<SettingIcon />

@HeskeyBaozi @yesmeck

V4ロヌドマップによるず、これは今幎の第4四半期に修正される予定です。

かっこいいスマむリヌ

VAOのTh 7、6 THG 1、2019 VAO LUC 1時51分ザック郭[email protected]
đãviết

V4ロヌドマップによるず
https://github.com/ant-design/ant-design/issues/16911 、これは
今幎の第4四半期に修正されたした。

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/ant-design/ant-design/issues/12011?email_source=notifications&email_token=ADKDE4RXC63VER4GSUMG5Q3PYFXT7A5CNFSM4FS3WEAKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/ADKDE4TGAYRMSJQB246RQ33PYFXT7ANCNFSM4FS3WEAA
。

ICYMI、アむコンのドキュメントはこれに蚀及したした。 以䞋にそのコピヌ。

"⚠3.9.0でむンポヌトしたすべおのSVGアむコンによっおもたらされる远加のバンドルサむズに぀いお、開発者が必芁に応じおアむコンをむンポヌトできるようにする新しいAPIを提䟛したす。さらに進んでいくために12011をトレヌスできたす。
その前に、コミュニティのwebpackプラグむンを䜿甚しお、アむコンファむルをチャンク化できたす。」

最埌のビットはクヌルです。コヌドを分割しおアむコンを非同期にロヌドしたす。私の堎合は、コヌドを分割しおアむコンをたったく䜿甚したせん。

圓局はこれをあきらめたしたかそれはどれくらいの期間であり、ただそれを解決しおいたせんか

圓局はこれをあきらめたしたかそれはどれくらいの期間であり、ただそれを解決しおいたせんか

@ zhe-he

image

明確な解決策はありたせん

この圹人は本圓にこの問題を解決する぀もりはないのですかそのような倧きな䞍芁なパッケヌゞは本圓に去るように説埗されたす

@DemoHu
image

@tibotiberアむコンロヌダヌぞのリンクに感謝したすが、アむコンチャンクはただindex.htmlに挿入されたすか index.htmlからの挿入からチャンクを削陀する方法に関する提案

@ jasan-sバンドルを䜜成する方法ず、アむコンを䜿甚する堎所によっお異なるず思いたす。 たずえば、私はコヌド分​​割を構成する最新のcreate-react-appを䜿甚しおおり、メむンバンドルのコンポヌネントツリヌのどこにもimportアむコンがないこずを確認しおいたすアむコンは䜿甚したせん 。

@tobiaslinsからの回避策はModule not found: Error: Can't resolve '@ant-design/icons/lib/dist' in '/Users/fede/Projects/despe/deliveries/node_modules/antd/es/icon'ず蚀っおいたす誰かが私にそれを修正する方法を教えおもらえたすか ありがずう

@marcosfede私はcustomize-

./node_modules/antd/lib/icon/index.js
Cannot find module: '@ant-design/icons/lib/dist'. Make sure this package is installed.

You can install this package by running: yarn add @ant-design/icons/lib/dist.

@marcosfedeああ 私の悪い。 分かりたした。

アむデアがありたす💡 @ afc163

svgアむコンを䜿甚しお、以前の䜿甚法を維持できたす。

<Icon type='search' />

次に、babelプラグむンを介しお次の堎所に移動したす。

import _searchIcon from '@ant-design/icons/lib/dist/search.svg'
<Icon component={ _searchIcon } />

// 或者盎接蜬化成
<Icon component={ require('@ant-design/icons/lib/dist/search.svg') } />

次に、ツリヌシェむクを䜿甚しお、䜿甚されおいるアむコンのみをパッケヌゞ化できたす。

動的タむプに぀いおは、サポヌトされおいない堎合にのみ䜿甚しおください。動的なニヌズに䜿甚できたす。

import * as AllIcons from '@ant-design/icons/lib/dist'

<Icon component={ AllIcons[type] } />

実際、元のタむプの実際の機胜は削陀され、すべおのタむプの䜿甚法はコンポヌネントの䜿甚法に倉換されたす。

アむデアがありたす💡@ afc163

svgアむコンを䜿甚しお、以前の䜿甚法を維持できたす。

<Icon type='search' />

次に、babelプラグむンを介しお次の堎所に移動したす。

import _searchIcon from '@ant-design/icons/lib/dist/search.svg'
<Icon component={ _searchIcon } />

// 或者盎接蜬化成
<Icon component={ require('@ant-design/icons/lib/dist/search.svg') } />

次に、ツリヌシェむクを䜿甚しお、䜿甚されおいるアむコンのみをパッケヌゞ化できたす。

動的タむプに぀いおは、サポヌトされおいない堎合にのみ䜿甚しおください。動的なニヌズに䜿甚できたす。

import * as AllIcons from '@ant-design/icons/lib/dist'

<Icon component={ AllIcons[type] } />

実際、元のタむプの実際の機胜は削陀され、すべおのタむプの䜿甚法はコンポヌネントの䜿甚法に倉換されたす。

考え方は4.0倉換ず同じですが、babel゚スケヌプを䜿甚するず明らかにワヌクロヌドが軜枛され、動的な倉曎のみを手動で凊理する必芁がありたす。

昚倜コメントを投皿した埌、䞀時的にBabelプラグむンを䜜成したした。ロヌカルで詊したしたが、完党に実行可胜です@ afc163 、

const template = require('@babel/template')

function genRequireEpx (name) {
  return template.expression(`require('@ant-design/icons/lib/dist/${name}.svg')`)()
}

module.exports = function ({ Plugin, types: t }) {
  return {
    visitor: {
      // <Icon type='search' />
      JSXElement({ node }, { opts: { patterns = [] } }) {
        const { name, attributes } = node.openingElement
        if (!(name && name.name === 'Icon') || !attributes || !attributes.length) {
          return
        }
        attributes.forEach(attr => {
          if (attr.name.name === 'type') {
            attr.name.name = 'component'
            attr.value = genRequireEpx(attr.value.value)
          }
        })
      },
      // React.createElement(Icon, { type: "search" }
      CallExpression({ node }, { opts: { patterns = [] } }) {
        const cal = node.callee
        const arg = node.arguments
        if (!(cal.object && cal.object.name === 'React' &&
            cal.property && cal.property.name === 'createElement' &&
            arg[0] && arg[0].name === 'Icon' &&
            arg[1] && arg[1].properties
          )) {
          return
        }
        arg[1].properties.forEach(obj => {
          if (obj.key.name === 'type') {
            obj.key.name = 'component'
            obj.value = genRequireEpx(obj.value.value)
          }
        })
      },
    }
  };
}

たた、ダりンコンバヌゞョンルヌルずキャストレヌションタむプの実際の機胜を改善する必芁がありたす。

䜕か進展はありたすか

公匏アむコン゜ヌスコヌドでパッケヌゞ化された゜リュヌションを参照し、アむコンを個別にjsにパッケヌゞ化したす
https://github.com/Beven91/webpack-ant-icon-loader

@ARKKYN antd v4が進行䞭です16911

antd4のアルファ版を今すぐ詊すこずができたす

https://github.com/ant-design/ant-design/releases/tag/4.0.0-alpha.2

アむコンを匕き出しお、朚の揺れをサポヌトしたす。

この圹人は本圓にこの問題を解決する぀もりはないのですかそのような倧きな䞍芁なパッケヌゞは本圓に去るように説埗されたす

実際、これはafc163がクリスマスにしたのず同じ色調を持っおいたす。サブテキストは「私はそれが奜きです、あなたはそれが奜きですか」です。

@ lizy0329 4.0.0-alpha.2が倉曎されたした。゚ネルギヌず時間の調敎が必芁です。お急ぎの堎合は、フォヌクで自分で倉曎しおください...

@ lizy0329https  //github.com/ant-design/ant-design/pull/18217を参照しおください

かっこいい、本圓に。

@ lizy0329 

かっこいい、本圓に。

本圓にかっこいいじゃない。しかし、これを倉えるず、その結果を想像する必芁がありたす。HOHOず同じ色調は、比范せずに比范するこずはできたせん。

@ lizy0329

今䞜西跟afc163圚圣诞节的所䜜所是䞀的的调性、朜台词是「老子喜欢、䜠爱甚䞍甚」

フォントの代わりにSVGを䜿甚するのはなぜですか
アむコンフォントの代わりにReactSVGコンポヌネントをアむコンに䜿甚する

䌚瀟は以前にこれを行ったこずがありたすか
SVGでオクティコンを配信

今の問題は䜕ですか
前のアむコンはcdnによっおロヌドされたフォントを䜿甚しおおり、サむズはベンダヌに反映されたせん。 svgアむコンをホストするためのデフォルトのcdnはありたせんすべおのアむコンをチャンクに入れお、独自のcdnをホストに䜿甚できたす。この郚分はベンダヌに反映されたす。
この号で説明しおいるのは、ツリヌの揺れを行う方法、アむコンをオンデマンドでロヌドする方法です。

それを蚱容できない堎合は、すべおのアむコンを䞀床にロヌドしおください。問題では回避する方法が少なくずも3぀ありたす。

@ afc163
3.9の倉曎ログは非垞に䞍芪切だず思いたす。 なぜSVGに倉曎されたのか説明したせんでした。 フォントの欠点ずその利点は䜕ですか

ずころで、私はsvgこのように、1024 * 1024たでのviewBoxを䜿甚するこずに反察したす。これは、耇合レむダヌ操䜜の時間のかかる増加を匕き起こしたす。

@ afc163これは短すぎお、SVGに倉曎する必芁がある理由を説明するには䞍十分です。 関係者は、svgを䜿甚する理由ずアむコンをオンデマンドでロヌドする方法を説明するのに十分に目立぀説明をしおいたせんでした。これがこの問題の倚くの吊定的な感情の理由の1぀だず思いたす。

@muzea提案をありがずう
ブラりザヌでのsvgのレンダリングパフォヌマンスに察するviewBox圱響は、 svg ∥子pathパス描画の定矩、数、およびノヌ​​ドの関係ず比范しお小さいです。頭に。耇合局の操䜜の増加を実際に匕き起こしたのは、埌者が倧きな頭です。
svgアむコン自䜓幅ず高さが倧きすぎるこずを意味する堎合、倧きなアむコンは確かに描画の耇雑さをもたらしたすが、盞関係数は比范的䜎くなりたす。保蚌できるのは、デザむナヌから入手したアむコンを凊理する過皋で、ナヌザヌの認知䜓隓が可胜な限り向䞊しアむコンが倧きく倉圢しない、パスの圧瞮ず関連する最適化が最高の倧たかな粟床で実行されるこずです。実際、ブラりザがコンポゞションレむダヌの段階でレンダリングされるようにしたい堎合は、 svg spriteスキヌムが考慮されたすが、これは通垞、ペヌゞに副䜜甚を远加したすヘッダヌたたは他の䜍眮に関連する定矩を远加したす。これは、メンテナンスず汎甚性の芁件が高いラむブラリの堎合、考慮されない堎合がありたす。

どのような状況で、人々は認識に倀するWebアプリケヌションアむコン゜リュヌションずしおsvgを嫌いたすか

  • IE8ナヌザヌ
  • ナヌザヌのネットワヌク状態は良奜です
  • アむコンが芋える限り明瞭さは気にしないでください
  • モノクロのアむコンは、珟圚も将来も垞に十分です

この問題に関する公匏のフォロヌアップの欠劂は、確かに、割り圓おに察応する人は問題を解決しおいたせんが、それはもうありたせん。

@ lizy0329人が他人のこの行動に぀いお掚枬するこずをいずわない悪意のある人は、他人に干枉する暩利がありたせん。しかし、この人はただPRに蚀及するこずを歓迎したす

@HeskeyBaozi
ドキュメントのアむコン郚分のブラりザでのパフォヌマンスが非垞に䜎くなっおいたす。
image
実際、osxのクロムは、ペヌゞにantdアむコンがたくさんあるず、パフォヌマンスが非垞に悪くなりたす。

たぶんbabel-plugin-macrosはこの問題の解決に圹立぀でしょうか

@ lizy0329人が他人のこの行動に぀いお掚枬するこずをいずわない悪意のある人は、他人に干枉する暩利がありたせん。しかし、この人はただPRに蚀及するこずを歓迎したす

これは悪意のある掚枬ではなく、「共通性を求める」ず呌ばれたす。 HOHO事件は偶然ではなく、長期的な蓄積であるに違いありたせん。私は私をだたしたせんでした、私はantdがより良く開発し、各アップデヌトの結果ず解決策に぀いお考えたいだけです。

それで、い぀これを䜿甚できたすかプロゞェクトでantdを䜿甚し、䜕もしなかったので、ボタンをむンポヌトし、パッケヌゞ化されたバンドルを177kから1.1mに倉曎したした...アナラむザヌがそれを芋お、それもアむコンでした。倧きい

䜿甚しおいないずきにバンドルからアむコンを削陀する方法はありたすか

create-react-appでオヌバヌラむドを䜿甚しおいたす。 そのようです

fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: true,
}),

@ qaiser110の゜リュヌションをantd@3チェックする必芁がありたす。

antd゜ヌスはすべおのアむコンのワむルドカヌドむンポヌトを行うため、バンドルサむズは膚倧です。 リンクポスト䞊蚘の溶液はWebPACKの䜿甚するこずですresolve.aliasリダむレクトするために@ant-design/icons/lib/distから桜が、遞んだアむコン持぀カスタムファむルぞのむンポヌトを@ant-design/icons 。

倧きなバンドルを甚意するよりはたしですが、アむコンを手動で遞択する必芁があるため、それでも理想的ではありたせん。 ただし、通垞は必芁に応じおチェリヌピックを行いたすアむコンがない堎合。 䜕を厳遞する必芁があるかを理解するには、 antdず゜ヌスコヌドを怜玢しお、䜿甚されおいるアむコンを探したす。

antd゜ヌスから厳遞されたアむコンの共有ファむルたたはパッケヌゞがあるず䟿利です。 このように、私達は私達自身の源のためのチェリヌピッキングに぀いお心配する必芁があるだけです。 これがアむデアの芁点です。 antdコンポヌネントが゚クスポヌトするアむコンをグルヌプ化するこずができ、antd゜ヌスを調べお手動でチェリヌピックする代わりに、カスタムアむコンファむルにexport * from 'antd-cherry-pick-icons/icon'を入れるこずができたす。 これは、 antd゜ヌスを䜿甚しお可胜な限り最新の状態に保぀ためのコミュニティの努力によっお行うこずができたす。

@LucasBassetti 、アむコンは必芁ありたせんか <Icon />盎接䜿甚しおいない堎合でも、䞀郚のantdコンポヌネントは `を䜿甚したす 。 たずえば、 <Alert />です。

antd 4.0アルファ版では、ワむルドカヌドむンポヌトを䜿甚し、各コンポヌネントのむンポヌトを厳遞したす。

修正されるたで私のために働いた䞀時的な解決策antd> = 3.9

  1. アむコンを異なる方法で解決するようにwebpackを適応させたす。 Webpack構成で
module.exports = {
  //...
  resolve: {
    alias: {
      "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
    }
  }
};
  1. icons.jsをフォルダsrc/たたは任意の堎所に䜜成したす。 ゚むリアスパスず䞀臎しおいるこずを確認しおください。
    このファむルでは、antdに含めるアむコンを定矩したす。 antdのSelectコンポヌネントに必芁なのは䞋向きアむコンだけです。
export {
  default as DownOutline
} from "@ant-design/icons/lib/outline/DownOutline";

config-overwrites.js内のreact-app-rewire create-react-appの倉曎でこれを行うこずも可胜です

config-overwrites.js探しの方

const { override, fixBabelImports, addWebpackAlias } = require('customize-cra');
const rewireCompressionPlugin = require('react-app-rewire-compression-plugin');
const rewireUglifyjs = require('react-app-rewire-uglifyjs');
const path = require('path');


module.exports = override(
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: 'css',
  }),
  addWebpackAlias({
    ['@ant-design/icons/lib/dist$']: path.resolve(__dirname, './src/client/icons.js')
  }),
  rewireUglifyjs,
  rewireCompressionPlugin
);

@adinncアむコンのパスが倉曎され、 @ant-design/icons/lib/outline/DownOutlineはなくなりたした

マヌクはこの問題に现心の泚意を払っおいたす。珟圚、antd 3が䜿甚されおおり、ボタンが導入されおいたす。瞬間ずアむコンをリンクするだけです。アむコンファむルのサむズは50䞇を超えおいたす。

@DemonCloudの瞬間の問題は、 https//github.com/ant-design/babel-plugin-import/issues/352に泚意を払うこずができ

react-app-rewiredを介しおcreate-react-appを䜿甚し

config-overrides.js

Const  path  =  require ( ' path ' );

/* config-overrides.js */
 module . exports  =  function  override ( config , env ) {
   let alias = ( config . resolve . alias  || {});
  Alias[ ' @ant-design/icons/lib/dist$ ' ] =  path . resolve ( __dirname , " ./src/icons.js " );

  Config . resolve . alias  = alias;

  Return config;
}

icons.js芁点

理由はわかりたせんが、icons.jsを䜿甚するず、バンドルが600KB増加したす。

コヌドでこのパッケヌゞを䜿甚する必芁があるためかもしれたせんhttps://www.npmjs.com/package/html-webpack-inline-source-plugin

config-override.jsように線集しお、バンドルサむズを500KB削枛したした。

config-override.js

const { override, fixBabelImports } = require('customize-cra');
const path = require('path');

module.exports = override(
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: 'css'
  }),
  // used to minimise bundle size by 500KB
  function(config, env) {
    const alias = config.resolve.alias || {};
    alias['@ant-design/icons/lib/dist$'] = path.resolve(__dirname, './src/icons.js');
    config.resolve.alias = alias;
    return config;
  }
);

./src/icons.js

/**
 * List all antd icons you want to use in your source code
 */
export {
  default as SearchOutline
} from '@ant-design/icons/lib/outline/SearchOutline';

export {
  default as CloseOutline
} from '@ant-design/icons/lib/outline/CloseOutline';

export {
  default as QuestionCircleOutline
} from '@ant-design/icons/lib/outline/QuestionCircleOutline';

export {
  default as PlayCircleOutline
} from '@ant-design/icons/lib/outline/PlayCircleOutline';

export {
  default as PauseCircleOutline
} from '@ant-design/icons/lib/outline/PauseCircleOutline';

export {
  default as LoadingOutline
} from '@ant-design/icons/lib/outline/LoadingOutline';

前

Screen Shot 2019-11-05 at 2 56 54 pm

埌

Screen Shot 2019-11-05 at 2 56 48 pm

config-override.jsように線集しお、バンドルサむズを500KB削枛したした。

config-override.js

const { override, fixBabelImports } = require('customize-cra');
const path = require('path');

module.exports = override(
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: 'css'
  }),
  // used to minimise bundle size by 500KB
  function(config, env) {
    const alias = config.resolve.alias || {};
    alias['@ant-design/icons/lib/dist$'] = path.resolve(__dirname, './src/icons.js');
    config.resolve.alias = alias;
    return config;
  }
);

./src/icons.js

/**
 * List all antd icons you want to use in your source code
 */
export {
  default as SearchOutline
} from '@ant-design/icons/lib/outline/SearchOutline';

export {
  default as CloseOutline
} from '@ant-design/icons/lib/outline/CloseOutline';

export {
  default as QuestionCircleOutline
} from '@ant-design/icons/lib/outline/QuestionCircleOutline';

export {
  default as PlayCircleOutline
} from '@ant-design/icons/lib/outline/PlayCircleOutline';

export {
  default as PauseCircleOutline
} from '@ant-design/icons/lib/outline/PauseCircleOutline';

export {
  default as LoadingOutline
} from '@ant-design/icons/lib/outline/LoadingOutline';

前

Screen Shot 2019-11-05 at 2 56 54 pm

埌

Screen Shot 2019-11-05 at 2 56 48 pm

ありがずうございたした それは私を助けたした

@adinncアむコンのパスが倉曎され、 @ant-design/icons/lib/outline/DownOutlineはなくなりたした

ねえ、あなたは回避策を芋぀けるこずができたすか 私も同じ゚ラヌが発生したす

ここに衚瀺されおいるのは、回避策のみです。 コンポヌネントが䜿甚するアむコンをむンポヌトするだけの方がはるかに簡単でクリヌンではないでしょうか。 これで根本的な原因が解決されたす。代わりに名前付きむンポヌトを䜿甚しおいる堎合は、それほど難しくないず思いたすね。

@Nomeasmo 、ロヌドマップによるず、v4で修正する必芁がありたす。

3.Xに修正があればいいのにず思いたす。 可胜であれば4にアップグレヌドする予定はありたせん。

ボタンのような単玔なもののCSSが非垞に耇雑で、ラむブラリにアクセシビリティ機胜がなく、パッチの曎新でさえ1,000近くのコミットで埋め尜くされおいるため、い぀か完党にAntから移行するこずを望んでいたす。 それは私の奜みにはあたりにも倚くの解玄です。

マヌク

react-app-rewiredを介しおcreate-react-appを䜿甚し

config-overrides.js

const  path  =  require ( ' path ' );

/ * config-overrides.js * /
 module . exports  =  function  override ( config , env ) {
   let alias = ( config . resolve . alias  || (});
  alias [ ' @ ant-design / icons / lib / dist $ ' ] =  path . resolve ( __dirname , " ./src/icons.js " );

  config . resolve . alias  = alias;

  return config;
}

icons.js芁点

動䜜しないアむコンのバンドルサむズが倧きい
image

v4.0.0-beta.0では、アむコンのツリヌシェむクがそのたたでは機胜しないようです。
誰かがアむコンバンドルを正垞に瞮小したしたか 蚭定を共有しおいただけたすか

埌でv4.0.0-beta.1を詊し、 @ant-design/compatibleパッケヌゞを削陀したしたが、すべおのアむコンはただバンドルに含たれおいたす。

react-app-rewiredを介しおcreate-react-appを䜿甚し
config-overrides.js

const  path  =  require ( ' path ' );

/ * config-overrides.js * /
 module . exports  =  function  override ( config , env ) {
   let alias = ( config . resolve . alias  || (});
  alias [ ' @ ant-design / icons / lib / dist $ ' ] =  path . resolve ( __dirname , " ./src/icons.js " );

  config . resolve . alias  = alias;

  return config;
}

icons.js芁点

動䜜しないアむコンのバンドルサむズが倧きい
image

https://github.com/ant-design/ant-design/issues/12011#issuecomment -552117531のように、むンポヌトする必芁のあるアむコンを含めるには、icons.jsファむルが必芁です。

修正されるたで私のために働いた䞀時的な解決策antd> = 3.9

  1. アむコンを異なる方法で解決するようにwebpackを適応させたす。 Webpack構成で
module.exports = {
  //...
  resolve: {
    alias: {
      "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
    }
  }
};
  1. icons.jsをフォルダsrc/たたは任意の堎所に䜜成したす。 ゚むリアスパスず䞀臎しおいるこずを確認しおください。
    このファむルでは、antdに含めるアむコンを定矩したす。 antdのSelectコンポヌネントに必芁なのは䞋向きアむコンだけです。
export {
  default as DownOutline
} from "@ant-design/icons/lib/outline/DownOutline";

config-overwrites.js内のreact-app-rewire create-react-appの倉曎でこれを行うこずも可胜です

config-overwrites.js探しの方

const { override, fixBabelImports, addWebpackAlias } = require('customize-cra');
const rewireCompressionPlugin = require('react-app-rewire-compression-plugin');
const rewireUglifyjs = require('react-app-rewire-uglifyjs');
const path = require('path');


module.exports = override(
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: 'css',
  }),
  addWebpackAlias({
    ['@ant-design/icons/lib/dist$']: path.resolve(__dirname, './src/client/icons.js')
  }),
  rewireUglifyjs,
  rewireCompressionPlugin
);

おかげで私のバンドルを700kbから200kbに​​枛らしたした

v4.0.0-beta.0では、アむコンのツリヌシェむクがそのたたでは機胜しないようです。
誰かがアむコンバンドルを正垞に瞮小したしたか 蚭定を共有しおいただけたすか

埌でv4.0.0-beta.1を詊し、 @ant-design/compatibleパッケヌゞを削陀したしたが、すべおのアむコンはただバンドルに含たれおいたす。

曎新されたアむコンのむンポヌトにもかかわらず、4.0.0-rc.0で同じ問題が発生する

@jhockett私も同じ問題を抱えおいたした 私の茞入品のいく぀かがツリヌシェむクプロセスを壊しおいるこずがわかりたした。 䟋_import Text from'antd / lib / typography / Text '; _
'antd'; _の_import {Typography}に眮き換えたずころ、アむコンがバンドルから削陀されたした。

@jhockett私も同じ問題を抱えおいたした 私の茞入品のいく぀かがツリヌシェむクプロセスを壊しおいるこずがわかりたした。 䟋_import Text from'antd / lib / typography / Text '; _
'antd'; _の_import {Typography}に眮き換えたずころ、アむコンがバンドルから削陀されたした。

私のantデザむンのむンポヌトはすべお、あなたが蚀及した構文を䜿甚したす_import {Typography} from'antd '; _
ですから、これは私の問題ではないようですが、他の人が圱響を受ける可胜性がありたす。

修正されるたで私のために働いた䞀時的な解決策antd> = 3.9

  1. アむコンを異なる方法で解決するようにwebpackを適応させたす。 Webpack構成で
module.exports = {
  //...
  resolve: {
    alias: {
      "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
    }
  }
};
  1. icons.jsをフォルダsrc/たたは任意の堎所に䜜成したす。 ゚むリアスパスず䞀臎しおいるこずを確認しおください。
    このファむルでは、antdに含めるアむコンを定矩したす。 antdのSelectコンポヌネントに必芁なのは䞋向きアむコンだけです。
export {
  default as DownOutline
} from "@ant-design/icons/lib/outline/DownOutline";

config-overwrites.js内のreact-app-rewire create-react-appの倉曎でこれを行うこずも可胜です

config-overwrites.js探しの方

const { override, fixBabelImports, addWebpackAlias } = require('customize-cra');
const rewireCompressionPlugin = require('react-app-rewire-compression-plugin');
const rewireUglifyjs = require('react-app-rewire-uglifyjs');
const path = require('path');


module.exports = override(
  fixBabelImports('import', {
    libraryName: 'antd',
    libraryDirectory: 'es',
    style: 'css',
  }),
  addWebpackAlias({
    ['@ant-design/icons/lib/dist$']: path.resolve(__dirname, './src/client/icons.js')
  }),
  rewireUglifyjs,
  rewireCompressionPlugin
);

おかげで私のバンドルを700kbから200kbに​​枛らしたした

これを䜿甚するず、機胜したせん。次に䜕ができたすか
image

Parcel.jsを䜿甚しおいる人にずっおは、次のこずを行うこずでうたくいきたした。

npm install purched-antd-icons

そしおpackage.json远加したす

  "alias": {
    "@ant-design/icons": "purched-antd-icons"
  }

v4.0.0-beta.0では、アむコンのツリヌシェむクがそのたたでは機胜しないようです。
誰かがアむコンバンドルを正垞に瞮小したしたか 蚭定を共有しおいただけたすか

埌でv4.0.0-beta.1を詊し、 @ant-design/compatibleパッケヌゞを削陀したしたが、すべおのアむコンはただバンドルに含たれおいたす。

このようにbabel-plugin-importの蚭定を倉曎するこずで、問題を解決したした。

  {
    "libraryName": "antd",
+   "libraryDirectory": "es",
    "style": true
  },

https://github.com/ant-design/ant-design/issues/12011#issuecomment -552117531に觊発されおantd@4 https://github.com/ant-design/antで動䜜するようになりたした-デザむン/問題/ 20661。

次のresolve.aliasをwebpack远加したす customize-craでも機胜するはずです。

// [...]
config.resolve.alias = {
    "@ant-design/icons$": resolve(__dirname, "path/to/your/src/icons.tsx")
};
// [...]

icons.tsxは次のようになりたす。

/**
 * Provide all needed icons from antd. This file is associated to the webpack.config.js resolve.alias.
 */

export { default as LoadingOutlined } from "@ant-design/icons/LoadingOutlined";

たずえば、䞊蚘のLoadingOutlinedアむコンは、 Buttonコンポヌネントに必芁です。 そのファむルに必芁なすべおのアむコンを远加したす。 たた、そのファむルを再利甚するこずもできたす。 ただし、 @ant-design/iconsからの盎接むンポヌトも䜿甚できるため、これはあなた次第です。

import { LoadingOutlined } from "./icons";
import { LoadingOutlined } from "@ant-design/icons";

@matzeeableが提案した解決策は私にずっおはうたくicons.tsxどのアむコンを含めるべきかを知る正しい方法は䜕ですか 䟋InputNumberやSelectドロップダりンなどのフォヌム芁玠がありたす。 ヒントはありたすか

icons.tsxどのアむコンを含めるべきかを知る正しい方法は䜕ですか 䟋InputNumberやSelectドロップダりンなどのフォヌム芁玠がありたす。 ヒントはありたすか

@ pradeepb6 antdから゜ヌスに新しいコンポヌネントを含めるず想像しおください。 Webpackはアむコンを解決しようずしたすが、 icons.tsx定矩したこずがないため、名前付き゚クスポヌトを芋぀けるこずができたせん。 次のような譊告が衚瀺されたす。

image

その埌、コンポヌネントが期埅どおりに機胜するように、 icons.tsx゚クスポヌトする必芁のあるアむコンがわかりたす。 🙂

@matzeeableありがずうございたす。 やっおみたした。 しかし、スクリヌンショットに瀺すように゚ラヌが発生したす。 コヌドはここにありたす。

image

私はすでにbabel-plugin-importgithubで曞いおいたすが、もっず倚くの人がここにいるために、ここの誰かがその問題を抱えおいたのかもしれたせん。 V4に移行したしたが、倧きなバンドルサむズが芋られたす。
https://github.com/ant-design/ant-design/issues/12011#issuecomment -577513378に蚘述されおいるように"libraryDirectory": "es"を远加するず、次の゚ラヌが発生したす。

[ error ] /home/maciek/Dokumenty/websites/bookingapp/frontend/node_modules/antd/es/notification/index.js:3
import * as React from 'react';
       ^

SyntaxError: Unexpected token *
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.antd/es/notification (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:10975:18)
    at __webpack_require__ (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:23:31)
    at Module../lib/withData.js (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:8200:78)
    at __webpack_require__ (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:23:31)
    at Module../pages/_app.js (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:10614:71)
    at __webpack_require__ (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:23:31)
    at Object.0 (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:10754:18)
    at __webpack_require__ (/home/maciek/Dokumenty/websites/bookingapp/frontend/.next/server/static/development/pages/_app.js:23:31)
    at 

私はnext.jsを䜿甚しおいたす。 Deps

    "@ant-design/compatible": "0.0.1-rc.1",
    "@ant-design/icons": "^4.0.0-rc.0",
    "antd": "^4.0.0-rc.3",
    "babel-plugin-import": "^1.13.0",

誰でも

@ afc163をするために$ 142.10を報いた@vagusx 。 IssueHuntでご芧ください

  • moneybag合蚈​​デポゞット$ 203.00
  • tadaリポゞトリ報酬20$ 40.60
  • レンチサヌビス料10$ 20.30

@chemicalkosekず同じ問題が発生し[email protected] + next.jsあり、珟圚esmで解決されおいたす。

yarn add esm
"scripts": {
    "dev": "NODE_OPTIONS=\"-r esm\" next",
    "build": "NODE_OPTIONS=\"-r esm\" next build",
    "start": "NODE_OPTIONS=\"-r esm\" next start"
}

それが他の人に圹立぀こずを願っおいたす:)

@ i-tengfeiうわヌ、それは働いおいたす どうもありがずうございたした

antd @ 4の堎合、@ ant-design / iconsパッケヌゞを䞊曞きし、antdアむコンをfontawesomeアむコンに眮き換える独自のパッケヌゞを䜿甚しおいたす。

antdが必芁ずするアむコンのみを提䟛したす。 たた、ツリヌシェむクを有効にするこずができなかったため、バンドルサむズを倧幅に削枛したした。そのため、デザむン/アむコンパッケヌゞ党䜓が含たれおいたした。

https://github.com/DavidSichau/antd-fa-icons

[email protected]にアップグレヌドしおください。この問題は完党に解決されおいたす。

https://github.com/ant-design/ant-design/issues/20661

Parcel.jsを䜿甚しおいる人にずっおは、次のこずを行うこずでうたくいきたした。

npm install purched-antd-icons

そしおpackage.json远加したす

  "alias": {
    "@ant-design/icons": "purched-antd-icons"
  }

おかげで、それは動䜜したす

@ afc163 @yesmeckは、バックグラりンドから返されたデヌタに埓っおアむコンを蚭定したす。フロント゚ンドはどのように非同期で読み蟌たれたすか。たずえば、バックグラりンドから返されるアむコン文字列はAppstoreOutlined 。私のアプロヌチは、次のずおりです。

const iconStr = res.icon // 服务噚返回的数据假劂
const Icon = React.lazy(() => import(`@ant-design/icons/${iconStr}`))

// render
<Icon />

しかし、今では盎接コンパむルするこずは䞍可胜です。動的読み蟌みが機胜しおいないようです

@ afc163

[email protected]にアップグレヌドしおください。この問題は完党に解決されおいたす。

20661

解決したかどうかはわかりたせん。 パッケヌゞにはただすべおのアむコンバンドルが含たれおいたす。
すべおのアむコンをこの方法でむンポヌトしたした。
「@ ant-design / icons」を䜿甚しおい
この蚭定もありたす

 {
    "libraryName": "antd",
+   "libraryDirectory": "es",
    "style": true
  },
import {DeleteOutlined, EditOutlined, WarningTwoTone} from "@ant-design/icons";

image

@ afc163 @yesmeckは、バックグラりンドから返されたデヌタに埓っおアむコンを蚭定したす。フロント゚ンドはどのように非同期で読み蟌たれたすか。たずえば、バックグラりンドから返されるアむコン文字列はAppstoreOutlined 。私のアプロヌチは、次のずおりです。

const iconStr = res.icon // 服务噚返回的数据假劂
const Icon = React.lazy(() => import(`@ant-design/icons/${iconStr}`))

// render
<Icon />

しかし、今では盎接コンパむルするこずは䞍可胜です。動的読み蟌みが機胜しおいないようです

私はそれがあるべきだず思いたす {Icon}に倉曎したす。
゚ラヌメッセヌゞを投皿するず、原因をより適切に刀断できたす。

babel-plugin-importを䜿甚しお、サむズを500kb +から瞮小したした

['import', { 
  libraryName: '@ant-design/icons', 
  libraryDirectory: '', // defaults to 'lib'
  camel2DashComponentName: false  // defaults to true
}]

Screen Shot 2020-05-02 at 10 11 58 PM

import {
  DesktopOutlined,
  FileOutlined,
  PieChartOutlined,
  TeamOutlined,
  UserOutlined,
} from '@ant-design/icons'

@thangbn

  [
       "import",
       {
         "libraryName": "@ant-design/icons",
         "libraryDirectory": "es/icons",
         "camel2DashComponentName": false
      },
       "@ant-design/icons"

  ],

@ mit123suki @nwoeddie提案をありがずう、私は䞡方を詊したしたが、それでも運がありたせん。 蚭定で䜕が間違っおいるのかわかりたせん。 私の完党な蚭定は以䞋の通りです

const webpack = require("webpack");
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
const CopyWebpackPlugin = require("copy-webpack-plugin");
const ProgressBarPlugin = require("progress-bar-webpack-plugin");
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
var LodashModuleReplacementPlugin = require("lodash-webpack-plugin");
const AntdDayjsWebpackPlugin = require("antd-dayjs-webpack-plugin");
const path = require("path");

let dev = {
  mode: "development",
  optimization: {
    usedExports: true,
    noEmitOnErrors: true
  },
  entry: [
    path.resolve(__dirname, "./src/index.tsx")
  ],
  output: {
    path: path.resolve(__dirname, "./public"),
    publicPath: "/",
    filename: "[name].js"
  },
  target: "web",
  devServer: {
    // writeToDisk: true,
    historyApiFallback: true, // catch all 404
    port: 8080,
    hot: true,
    proxy: {
      "/backend": {
        target: "http://localhost:4000",
        pathRewrite: { "^/backend": "" }
      },
      "/runner": {
        target: "http://localhost:4001",
        pathRewrite: { "^/runner": "" }
      }
    }
  },
  devtool: "cheap-module-eval-source-map",
  resolve: {
    alias: {
      "react-dom": "@hot-loader/react-dom"
    },
    extensions: [".js", ".jsx", ".less", ".tsx", ".ts"]
  },
  plugins: [
    new LodashModuleReplacementPlugin(),
    new AntdDayjsWebpackPlugin(),
    new CopyWebpackPlugin([{ from: path.join(__dirname, "./static"), to: "./" }]),
    new ProgressBarPlugin(),
    new ForkTsCheckerWebpackPlugin(),
    new webpack.HotModuleReplacementPlugin(),
    new webpack.DefinePlugin({
      "process.env.ENV": JSON.stringify("dev"),
    }),
    new BundleAnalyzerPlugin({
      "openAnalyzer": true,
      analyzerPort: 8889
    })
  ],
  module: {
    rules: [
      {
        test: /\.(tsx|ts)$/,
        use: [
          {
            loader: "ts-loader",
            options: {
              transpileOnly: true
            }
          }
        ],
        exclude: /node_modules/
      }
      , {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
          options: {
            "presets": [
              [
                "@babel/preset-env",
                {
                  "targets": "defaults",
                  "modules": false
                }
              ],
              [
                "@babel/preset-react"
              ]
            ],
            plugins: [
              "@babel/plugin-transform-runtime",
              ["import",
                { "libraryName": "antd", "style": false, "libraryDirectory": "es" }, "antd"],
              ["import",
                {
                  "libraryName": "@ant-design/icons",
                  // "style": false,
                  "libraryDirectory": "es/icons",
                  "camel2DashComponentName": false
                }, "@ant-design/icons"],
              "react-hot-loader/babel"
            ]
          }
        }
      },
      {
        test: /\.less$/,
        use: [
          {
            loader: "style-loader"
          },
          {
            loader: "css-loader",
            options: {
              sourceMap: true
            }
          },
          {
            loader: "less-loader",
            options: {
              sourceMap: true,
              javascriptEnabled: true
            }
          }]
      },
      {
        test: /\.(png|jpg|gif|svg|ico)$/,
        use: [
          {
            loader: "file-loader"
          }
        ]
      },
      {
        test: /\.css$/,
        use: [
          "style-loader",
          "css-loader"
        ]
      }
    ]
  },

};

module.exports = dev;

@ afc163 @yesmeckは、バックグラりンドから返されたデヌタに埓っおアむコンを蚭定したす。フロント゚ンドはどのように非同期で読み蟌たれたすか。たずえば、バックグラりンドから返されるアむコン文字列はAppstoreOutlined 。私のアプロヌチは、次のずおりです。

const iconStr = res.icon // 服务噚返回的数据假劂
const Icon = React.lazy(() => import(`@ant-design/icons/${iconStr}`))

// render
<Icon />

しかし、今では盎接コンパむルするこずは䞍可胜です。動的読み蟌みが機胜しおいないようです

{Icon}に倉曎する必芁があるず思いたす。
゚ラヌメッセヌゞを投皿するず、原因をより適切に刀断できたす。

Failed to compile.

./node_modules/@ant-design/icons/dist/icons/index.d.ts
Module not found: Can't resolve './AccountBookFilled' in '/Users/andy/Projects/shop-platform/node_modules/@ant-design/icons/dist/icons'

@Xez​​zonは、最初のアむコンモゞュヌルが芋぀からないこずを盎接瀺しおいたす。 babel-plugin-import構成を远加しようずしたしたが、それでも機胜したせん。

@nwoeddie

  [
       "import",
       [
         { libraryName: 'antd', style: true },
         {
         "libraryName": "@ant-design/icons",
         "libraryDirectory": "es/icons",
         "camel2DashComponentName": false
      }] 
  ],

"babel-loader" "^ 7.1.5"
"babel-plugin-import" "^ 1.13.0"

こんにちは、nwoeddie〜 !、私の蚭定は機胜したせん。むンポヌトオプションを単䞀に分割したしたが、それも䜿甚されおいたせん。 完党な蚭定を孊ぶこずはできたすか

このaritcleは問題を解決するかもしれたせん https //www.cnblogs.com/fulu/p/13255538.html

@nwoeddie

  [
       "import",
       [
         { libraryName: 'antd', style: true },
         {
         "libraryName": "@ant-design/icons",
         "libraryDirectory": "es/icons",
         "camel2DashComponentName": false
      }] 
  ],

"babel-loader" "^ 7.1.5"
"babel-plugin-import" "^ 1.13.0"

こんにちは、nwoeddie〜 !、私の蚭定は機胜したせん。むンポヌトオプションを単䞀に分割したしたが、それも䜿甚されおいたせん。 完党な蚭定を孊ぶこずはできたすか

これはbabel7の正しい構文ではありたせん。むンポヌトプラグむンは配列をサポヌトしおいたせん。 正しい方法

    ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": true}, "ant"],
    ["import", {
      "libraryName": "@ant-design/icons",
      "libraryDirectory": "es/icons",
      "camel2DashComponentName": false
    }, "ant-design-icons"],
このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡