Как управлять вендорскими библиотеками в реагировании

В моем приложении "Реакция js" (с использованием веб-пакета) я использовал пользовательский интерфейс antd, который добавил пакет draft-js в мой проект. Но я не знаю, где я использовал draft.js
у меня два вопроса.
1-как я знаю, где я использовал проект JS.
2-draft.js увеличивая мой bundle размер файла.i удален draft-js от моего node_modules это показывает мне ошибку "draft-js" не найдено.

package.json

"dependencies": {
    "antd": "^3.10.9",
    "axios": "^0.18.0",
    "bundle-loader": "^0.5.6",
    "express-static-gzip": "^1.1.3",
    "moment": "^2.22.1",
    "node-sass": "^4.7.2",
    "normalize.css": "7.0.0",
    "npm": "^6.1.0",
    "rc-time-picker": "^3.3.1",
    "react": "16.0.0",
    "react-dom": "16.0.0",
    "react-ga": "^2.5.3",
    "react-google-maps": "^9.4.5",
    "react-loadable": "^5.5.0",
    "react-redux": "^5.0.7",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2",
    "recompose": "^0.27.1",
    "redux": "^3.7.2",
    "redux-thunk": "^2.2.0"
  },

введите описание изображения здесь и immutable.js устанавливаем два раза, другое дело, что после выполнения gzip также библиотеки antd и @ant, увеличивающие размер моего пакета.

так как я могу решить этот беспорядок.

1 ответ

Чтобы ответить на ваш основной вопрос, draft-js является переходной зависимостью вашего приложения. Чтобы определить, где он используется, вам нужно взглянуть на код (предпочтительно источник) прямой зависимости, которая зависит от него. В этом случае это будет antd@^3.10.9.

Хотя есть определенные исключения, в общем случае невозможно иметь прямую зависимость без транзитивной зависимости от ее зависимостей.

Чтобы решить обнаруженную проблему установки ImmutableJS несколько раз, в разных версиях применяется одна и та же логика. Когда две или более ваших зависимостей имеют транзитивную зависимость от неперекрывающихся версий одного и того же пакета, вы в конечном итоге устанавливаете несколько версий этого пакета. Без этого поведения ваши зависимости не могли бы положиться на работу.

Другими словами, рассматривайте несовместимые версии одного пакета как отдельные логические пакеты.

Сказав это, можно, используя определенные инструменты, такие как RequireJS и SystemJS и другие, переопределить транзитивные зависимости, например, заставить их использовать общую версию ImmutableJS. Однако этот подход, хотя и мощный, должен применяться с большой осторожностью, поскольку он действительно может зависеть от поведения, характерного для версии, которую они первоначально указали.

Другие вопросы по тегам