Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在项目中使用两个不同的React/React Dom版本_Reactjs_Npm_Webpack - Fatal编程技术网

Reactjs 在项目中使用两个不同的React/React Dom版本

Reactjs 在项目中使用两个不同的React/React Dom版本,reactjs,npm,webpack,Reactjs,Npm,Webpack,我处于一个非常奇怪的情况下,项目结构看起来像: 计划 小型项目1 小型项目2 节点单元 package.json 迷你项目本身就是在ruby容器中显示的react应用程序。因此,当用户转到/route1时,它将加载miniProject1 react页面。当他们转到/route2时,它会转到minipject2页面 我的任务是更新MiniProject2的react版本,但不干扰MiniProject1或进行任何可能干扰MiniProject1的更改 我按照如下方式安装react和rea

我处于一个非常奇怪的情况下,项目结构看起来像:

  • 计划
    • 小型项目1
    • 小型项目2
  • 节点单元
  • package.json
迷你项目本身就是在ruby容器中显示的react应用程序。因此,当用户转到/route1时,它将加载miniProject1 react页面。当他们转到/route2时,它会转到minipject2页面

我的任务是更新MiniProject2的react版本,但不干扰MiniProject1或进行任何可能干扰MiniProject1的更改

我按照如下方式安装react和react dom:

 "react-latest": "npm:react@^16.13.1",
 "react-dom-latest": "npm:react-dom@^16.13.1",
因此,我可以在MiniProject2中导入最新版本

我面临的问题是react dom具有“react”对等依赖关系,它试图拉取项目react,而不是我的别名“react latest”,这很有意义,但现在我一直在试图找出如何强制react dom要求我的react latest别名,而不是默认的react对等依赖关系

我也对潜在的网页配置解决方案持开放态度


有什么想法吗?

经过一些挖掘,我可以通过执行以下操作来强制react dom使用react latest:

package.json

"react": "^16.3.2",
"react-dom": "16.3.3",
"react-dom-latest": "npm:react-dom@^16.13.1",
"react-latest": "npm:react@^16.13.1",
webpack.config.js

module: {
rules: [
  {
    test: /\/node_modules\/react-dom-latest\/.*.js/,
    resolve: {
      alias: {
        react: path.resolve('./node_modules/react-latest')
      }
    }
  }]},
然后在需要使用最新react版本的文件顶部,我导入react,如下所示:

import React from 'react-latest'
//or
import ReactDOM from 'react-dom-latest' //for your index
import React from 'react'
//or
import ReactDOM from 'react-dom' //for your index
对于需要使用旧react的文件,我导入react如下:

import React from 'react-latest'
//or
import ReactDOM from 'react-dom-latest' //for your index
import React from 'react'
//or
import ReactDOM from 'react-dom' //for your index
这就是所有需要做的


免责声明:不要这样做,除非你不得不这样做,也没有像我这样的选择。它会增加捆绑包的大小,因为您将引入两个不同版本的react和reactidom

我认为我在我的项目中做了类似的事情。尝试以下操作:在webpack.config.js中,添加
resolve:{alias:{'react':path.resolve('./node\u modules/react')}
如前所述,这对我来说不起作用,但我将其更改为:react:path.resolve('./node\u modules/react latest'),它修复了project2,但破坏了project1(project1严重过时)