npm包管理,学问大得多

66 阅读2分钟

前提:有一个会话组件框在很多项目中都会使用,所以我们将他发布成一个npm包,名字叫做ellm-agentModal。该会话组件中有个很重要的依赖叫做langchain-ellm,这个依赖写在了会话组件项目的package.json中。

现在在宿主项目中的package.json中写入ellm-agentModal,准备引入这个会话组件。执行npm i,我们看一下node_modules,发现langchain-ellm并没有在会话组件ellm-agentModal中的node_modules中,而是和会话组件ellm-agentModal同级。

(按照技术专家类比后端dependencies的例子:子组件中的依赖放到安装在父组件中,这也是合理的,毕竟如果安装多个子组件的话,这样就可以避免重复安装同一个依赖。)

image.png

既宿主项目的node_modules中已经有了langchain-ellm,那我直接像下方在项目中使用就可以了。

image.png

但是在前端项目构建的时候,jerkin最下面(堆栈报错信息)出现报错:module not found。没错,我上面引入的资源们没有找到。可是为什么呢?明明在我本地的node_modules中可以找到@bocom/langchain-ellm路径。

image.png

再仔细看看报错日志,在测试环境中,即便会话组件安装在我们项目中,但是会话组件的依赖还是在会话组件的node_modules中。

image.png

排查原因:我本地的node版本和测试环境的node版本不一致(可能打包规则有不同)。

image.png

image.png

解决方案:在我们的项目中如果使用了一个依赖A,那么就该在我们的项目的package.json中添加依赖A。而不是因为子组件的package.json中有就不安装了。