У меня есть конкретный случай при разработке приложения реагирования, в котором настроено несколько точек входа, например:
entry: {
product: [
require.resolve('webpack-dev-server/client') + '?/',
require.resolve('webpack/hot/dev-server'),
paths.productIndexJs
],
app: [
require.resolve('react-dev-utils/webpackHotDevClient'),
paths.appIndexJs
]
}
Где paths.productIndexJs
- это еще одна точка входа, которая будет находиться в отдельной папке, например src/sample/sample.js
Это оптимизация, которую я использую для node_modules
, которая будет объединена в общий модуль
splitChunks: {
chunks: 'all',
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
name: "vendors",
chunks: "all" // chunk => chunk.name !== "pre-main.min"
}
}
}
Все с этой настройкой (несколько точек входа с этой настройкой) работает нормально , если я не использую React Hooks
Но если я использую какой-либо код с react hooks
, приложение разрывается с этой ошибкой:
Хуки могут вызываться только внутри тела компонента функции.
Я исследовал и пришел к выводу, что это из-за двойной загрузки реакции после отладки шагов, указанных здесь .
Ссылаясь на шаги, указанные в приведенной выше ссылке, я могу видеть window.React1 === window.React2
как true
в файлах, которые построены с первой точкой входа, т.е. paths.productIndexJs
Но это false
в файлах с точкой входа как paths.appIndexJs
Эта настройка работает, если я задаю react
и react-dom
как внешние и загружаю их в index.html
Но я хочу этого избежать.