npm 如何防止从父node_modules继承包

5f0d552i  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(158)

首先,我将给予这个问题的一些背景。
我正在开发一个NPM库。在项目文件夹中,我有另一个名为“example”的文件夹,用于测试库。结构看起来像下面。

|- node_modules/
|- src/ 
|- example/
|   |- node_modules/
|   |- src/
|   |- package.json
|- package.json

根文件package.json的依赖项为babel-jest。example/package.json的依赖项是react-scripts。在example目录中运行react-scripts start时,会出现以下错误:

据我所知,这是因为example/目录中的package.json继承了 (不确定这是否是正确的术语) 根package.json的依赖项。
也就是说,我可以使用安装在根package.json中的依赖项,在example/的src/中,这在某些情况下很方便。但这是我的用例的阻塞器。
我如何防止这种行为?(不改变目录结构)
谢谢你。

vd2z7a6w

vd2z7a6w1#

据我所知,Dan Abramov建议使用SKIP_PREFLIGHT_CHECK=true来解决这个问题,因为没有真实的的解决方案。

5uzkadbs

5uzkadbs2#

两种可行的选择是设置前缀或执行一些脚本来合并两个node_modules文件夹。

合并两个文件夹

PACKAGES=$(cat package.json | jq -r '.dependencies' | jq 'keys_unsorted' | jq -r '.[]')
for p in $PACKAGES; do
    # Check if the parent have it
    [[ ! -d "../../node_modules/$p" ]] && echo "$p directory exists!"

    # Check if the local path have it
    [...]
done

带前缀安装

npm install --prefix ./

另一件需要考虑的事情是,如果您正在应用程序中工作并使用其他一些包。出于某种原因,我并不完全理解当使用一个工作区包时,我无法让它工作,除非该包是在npm上分发的。但由于某种原因,它确实在yarn中使用了--前缀标志的等价物时找到了它。

yarn install --modules-folder node_modules

相关问题