如何通过 Yarn 使用本地路径安装软件包?找不到包
Posted
技术标签:
【中文标题】如何通过 Yarn 使用本地路径安装软件包?找不到包【英文标题】:How to install package with local path by Yarn? It couldn't find package 【发布时间】:2017-02-27 09:35:06 【问题描述】:在我的package.json
中,我通过其相对路径指向本地包my-custom-i18n
:
package.json
"dependencies":
"core-js": "^2.4.1",
"my-custom-i18n": "./../MyProject.Shared/myproject-i18n",
"rxjs": "5.0.0-beta.12",
...
npm install
正确安装包,但yarn
有问题,根本找不到这个包:
纱线产量
$ yarn
yarn install v0.15.1
info No lockfile found.
[1/4] Resolving packages...
error Couldn't find package "myproject-i18n" on the "npm" registry.
info Visit http://yarnpkg.com/en/docs/cli/install for documentation about this command.
我看到它在 npm
注册表中找到了它,而这个包并不存在。
问题
在本地包中使用 yarn 有什么变化吗?
本地包是指相对路径指向的包my-custom-i18n
。
【问题讨论】:
【参考方案1】:对于纱线版本
Yarn 需要前缀 file:
用于本地包。
相对路径:
yarn add file:./../your-project
对于绝对路径
yarn add file:/dev/your-project
对于您的示例,package.json
中的依赖项将声明如下:
"my-custom-i18n": "file:./../MyProject.Shared/myproject-i18n",
这也适用于 Yarn 和 NPM。
它与 NPM 客户端不兼容,Yarn 团队意识到并声明支持这种行为 - reference on GitHub issue。
更新:
自 v0.21.0 版本以来,不需要file:
前缀。
请参阅pull-request with fix 和changelog。
【讨论】:
谢谢,就像一个魅力。但如果它现在与 npm 客户端不兼容 - 我将保留npm
原样:) PS 我的想法是仅在本地使用 yarn
而无需转换整个团队和项目。所以..我将不得不等到支持这个:)
确保清除缓存。因为纱线总是先尝试缓存版本
+1 更新!删除 file:
前缀解决了我们遇到的问题,Windows 上的 yarn install
会将 ./
前缀添加到相对文件路径,但 macOS 上的 yarn install
会删除它。
似乎使用 yarn 1.17.3
file:
前缀在以下情况下仍然是必需的:假设您有包 bar
,它具有本地依赖项 ./dependencies/xyz
。如果另一个包foo
正在使用包bar
,它将尝试解析./dependencies/xyz
相对于foo
目录而不是相对于bar
目录。将依赖项更改为file:./dependencies/xyz
后,问题已解决。
万一其他人遇到这个问题:我在获取 yarn workspace
项目中的本地依赖项以在 Github Actions CI 上正确安装时遇到问题。将显式 file:
添加到单个工作区 package.json
中的路径允许 CI 正确解析依赖关系。【参考方案2】:
我用 yarn 尝试了file:
解决方案,但从未成功。我选择了直接包含包裹的不同途径。我能够添加 watch
以在文件更改时自动重建和更新浏览器。
我的情况
我有一个包含两个目录的 git 存储库:example/ 和 react-highlight-within-testarea/(下面我将简化为 mylib/
)。 example/ 是一个 react 应用程序,在 example/package.json 中具有以下依赖项:"mylib": "file:../mylib/"
(a) 并包含在 example/src/ 中import MyLib from 'mylib'
的 App.js。
我的解决方案
从 example/package.json 中删除 mylib。
yarn remove mylib
使分发成为我项目的一部分。
(cd example/src && ln -s ../../mylib/dist mylib)
更改example/src/App.js中的包含。
import MyLib from './mylib'
在 mylib 中安装手表。
(cd mylib ; yarn add watch)
在 mylib/package.json (b) 的 scripts
中添加监视命令。
"watch": "watch 'yarn build' src",
我现在在终端 (c) 中运行它。
(cd mylib && yarn install && yarn watch &)
(cd example && yarn install && yarn start)
成功
现在,每当我进行更改并将其保存在 mylib/src/ 或 example/src/ 中时,它都会被重建并推送到我浏览器中的 React 页面.
脚注
(a) 这些之前的设置是使用 package.json 来完成这项工作的众多尝试之一。
(b) 可能有更正确的方法可以做到这一点,但它对我有用。
(c) 我也可以把它做成一个 yarn 脚本。
【讨论】:
你运行的是哪个版本的纱线?此解决方案适用于 v.1(我将使用此信息更新答案) 我的 yarn 版本是 1.22.10。代码是 github.com/lonekorean/highlight-within-textarea 。目前我的解决方法是成功的,但反应时间不是很敏捷,但我正忙于与 CSS 和 DOM 作斗争,无法尝试更改为 正确 解决方案。【参考方案3】:如果您想简单地链接到本地包(因此无需重新安装即可获取本地包中的更改):
yarn add link:./../your-project
在yarn docs上查看更多信息
【讨论】:
以上是关于如何通过 Yarn 使用本地路径安装软件包?找不到包的主要内容,如果未能解决你的问题,请参考以下文章