pnpm可以代替npm link // yarn link吗?

5rgfhyps  于 2023-08-06  发布在  Yarn
关注(0)|答案(2)|浏览(181)

npm link和yarn link都不是最好的。我经常和他们发生矛盾。现在我已经读到了pnpm和它的本地存储。我想知道pnpm是否可以帮助我解决以下情况下的npm链接问题:
我有两个项目在不同的仓库中,因此不在一个工作空间中。一个是“应用程序”,另一个是应用程序中使用的“库”。现在,我想以某种方式构建这个库,并在app * 中使用新的构建版本,而不将其发布到全局npm注册表。这就是我经常使用Yarn Link的原因。但是,我想知道pnpm是否为我提供了一种“发布到本地商店”的方法。
所以我的问题是是否可以将构建包发布到本地pnpm repo,以使“app”中的“pnpm install lib”将成功安装新构建的“lib”包?

atmip9wb

atmip9wb1#

在此背景下:

  • /home/projects/myapp:myapp的本地git repo,在其依赖项中包含"mylib": "https://mygitlab.tld/team/mylib.git"
  • /home/projects/mylib: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,而不必重新链接它的所有使用)。

wixjitnu

wixjitnu2#

有三种方法。
您可以使用文件协议来引用本地库:

{
  "dependencies": {
    "lib": "file:../lib"
  }
}

字符串
在这种情况下,pnpm将创建到lib的每个文件的硬链接。它看起来像lib被复制到你的应用的node_modules。
您可以使用链接协议:

{
  "dependencies": {
    "lib": "link:../lib"
  }
}


在这种情况下,pnpm将创建一个指向app/node_modules/lib中的lib的符号链接。
或者,您可以用pnpm pack将库打包到一个tarball中,然后通过文件协议安装它。

{
  "dependencies": {
    "lib": "file:../lib/lib-1.0.0.tgz"
  }
}


没有办法“发布到本地商店”。

相关问题