npm link和yarn link都不是最好的。我经常和他们发生矛盾。现在我已经读到了pnpm和它的本地存储。我想知道pnpm是否可以帮助我解决以下情况下的npm链接问题:
我有两个项目在不同的仓库中,因此不在一个工作空间中。一个是“应用程序”,另一个是应用程序中使用的“库”。现在,我想以某种方式构建这个库,并在app * 中使用新的构建版本,而不将其发布到全局npm注册表。这就是我经常使用Yarn Link的原因。但是,我想知道pnpm是否为我提供了一种“发布到本地商店”的方法。
所以我的问题是是否可以将构建包发布到本地pnpm repo,以使“app”中的“pnpm install lib”将成功安装新构建的“lib”包?
2条答案
按热度按时间atmip9wb1#
在此背景下:
"mylib": "https://mygitlab.tld/team/mylib.git"
我想在myapp中使用本地实时测试来开发mylib,而不更改myapp:package.json依赖项。
为了实现这一点,在/home/projects/myapp中运行
pnpm link ../mylib
=> /home/projects/myapp/node_modules/mylib现在符号链接到/home/projects/mylib(而不是/home/projects/myapp/node_modules/.pnpm/mygitlab.tld+team+mylib...),因此在/home/projects/myapp中启动的pnpm start在/home/projects/mylib中的每个更改都有一个热重载工作正常。即使mylib的名称不是
mylib
,它也可以工作,如果它在其package.json中的名称是@myteam/lib
,那么pnpm link ../mylib
将符号链接/home/projects/myapp/node_modules/@myteam/lib到/home/projects/mylib为了得到相同的结果,您还可以使链接全局化(在本地PNPM存储中注册本地副本,然后使用它)
/home/projects/mylib
中运行pnpm link --global
/home/projects/myapp
中运行pnpm link --global mylib
(如果mylib名称是@myteam/lib,则应该是pnpm link --global @myteam/lib
)如果mylib在很多地方使用,并且你想快速从一个mylib git工作树切换到另一个工作树,使用这种方式会更容易(只需要在你想使用的mylib目录中运行
pnpm link --global
,而不必重新链接它的所有使用)。wixjitnu2#
有三种方法。
您可以使用文件协议来引用本地库:
字符串
在这种情况下,pnpm将创建到lib的每个文件的硬链接。它看起来像lib被复制到你的应用的node_modules。
您可以使用链接协议:
型
在这种情况下,pnpm将创建一个指向
app/node_modules/lib
中的lib的符号链接。或者,您可以用
pnpm pack
将库打包到一个tarball中,然后通过文件协议安装它。型
没有办法“发布到本地商店”。