Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.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
Npm 开发过程中如何避免网页两次加载_Npm_Reactjs_Webpack - Fatal编程技术网

Npm 开发过程中如何避免网页两次加载

Npm 开发过程中如何避免网页两次加载,npm,reactjs,webpack,Npm,Reactjs,Webpack,给定以下目录结构: my-project | |-- node_modules | |-- react |-- module-x | |--node_modules | |--react 您可以看到我的项目和模块-x都需要响应。我遇到了与上所述相同的问题,但建议从package.json依赖项中删除react。我这样做了,只要在模块-x中没有安装节点模块,它就可以正常工作,因为Webpack

给定以下目录结构:

my-project
|
|-- node_modules
    |
    |-- react
    |-- module-x
        |
        |--node_modules
            |
            |--react
您可以看到我的项目模块-x都需要响应。我遇到了与上所述相同的问题,但建议从package.json依赖项中删除react。我这样做了,只要在模块-x中没有安装节点模块,它就可以正常工作,因为Webpack将使用我的项目中的React。但是,如果我正在开发模块-x,并且安装了node_模块,那么Webpack将使用我的项目模块-x中的React

有没有一种方法可以让Webpack确保只使用一个React实例,即使它在两个不同的级别上都是必需的

我知道我可以在开发时将module-x保存在一个单独的目录中,但似乎我必须发布它,然后在我的项目中安装它来测试它,这不是很有效。我考虑过
npm-link
,但由于它仍然在module-x中安装了node_模块,所以我对它没有什么好运气


听起来和我面临的挑战很像,但似乎
npm重复数据消除
或Webpack的重复数据消除选项不起作用。我可能不了解一些重要的细节。

这个问题通常在使用
npm链接时出现。链接模块将在其自己的模块树中解析其依赖关系,这与需要它的模块树不同。同样地,
npm链接
命令安装
peerDependencies
以及
依赖项

您可以使用
resolve.alias
强制
require('react')
解析到您的本地版本的react

解析:{
别名:{
react:path.resolve(“./node_modules/react”),
},
},
如果您不想(或不能)修改项目配置,有一个更简单的解决方案:只需
npm链接
将自己回复到您的项目:

# link the component
cd my-app
npm link ../my-react-component

# link its copy of React back to the app's React
cd ../my-react-component
npm link ../my-app/node_modules/react

我在这个问题上花了半天时间。不幸的是,浏览器中的错误消息和网页文档都不是很有用。你救了我一天!谢谢此解决方案仍然会导致webpack为react分配不同的ID(从应用程序引用)和react(从链接模块引用)。所以webpack创建的react模块的多个实例救了我。这是文件:这可能会变得一团糟。库是一对多的(一个库安装在多个应用程序中),但这会通过将一个库与一个应用程序的react文件夹链接到库来关联该库。因此,一次使用两个应用程序是不可能的(就像图书馆的示例页面和消费者应用程序)。@MatthiasDailey如果我们有更多的项目,你知道如何解决吗?@alek我发现yalc很有用,如果你使用Thread,那么Thread工作区是另一个解决方案。这个答案节省了我使用CRA(创建React应用程序)的时间。通过添加带有绝对路径的结果链接,答案可能更容易理解。如果使用
纱线
#链接组件cd my app/node#模块/react Thread链接#将其react副本链接回应用程序的react cd../../my react组件纱线链接react