如何通过Yarn安装本地路径的包?找不到包

问题描述 投票:0回答:4

在我的

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
注册表中查找,但该包并不存在于此。

问题

在本地包中使用纱线有什么变化吗? 我所说的本地包是指相对路径指向的包,如

my-custom-i18n
.

node.js npm yarnpkg
4个回答
332
投票

对于纱线版本 < 2.x

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 团队已意识到并声明支持此行为 - GitHub 问题上的参考

更新:

v0.21.0 发布以来,不再需要

file:
前缀。 请参阅带有修复的拉请求更改日志


35
投票

适用于纱线版本 >= 2.x(Yarn Berry)

为了引用本地包,Yarn 支持不同的协议

  • file:
    创建指定目录的副本。当指定相对路径(以
    ./
    ../
    开头)或绝对路径(以
    /
    开头)时,也可以省略
    file:
    前缀。
  • portal:
    创建到指定目录的符号链接并解决其传递依赖关系。
  • link:
    创建到指定目录的符号链接,但不解析其传递依赖项。

要添加依赖项,请运行

yarn add your-project@file:../your-project

尝试运行

yarn add file:../your-project
(不带
your-project@
前缀)将导致以下错误:
Usage Error: The file:../your-project string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?


28
投票

如果您只想链接到本地软件包(因此无需重新安装即可拾取本地软件包中的更改):

yarn add link:./../your-project

查看更多纱线文档


2
投票

我尝试了使用纱线的

file:
解决方案,但从未成功。我选择了直接包含包的不同途径。我能够添加
watch
以在文件更改时自动重建和更新浏览器。

我的情况

我有一个包含两个目录的 git 存储库:example/react-highlight-within-testarea/(我将简化为下面的

mylib/
)。 example/ 是一个 React 应用程序,在 example/package.json 中依赖于:
"mylib": "file:../mylib/"
(a) 并包含在 import { MyLib } from 'mylib'
example/src/App.js
中。

我的解决方案

  1. example/package.json中删除 mylib

    yarn remove mylib

  2. 将分发作为我的项目的一部分。

    (cd example/src && ln -s ../../mylib/dist mylib)

  3. 更改 example/src/App.js 中的包含内容。

    import { MyLib } from './mylib'

  4. mylib中安装手表。

    (cd mylib ; yarn add watch)

  5. mylib/package.json
    scripts中添加watch命令(b)。

    "watch": "watch 'yarn build' src",

  6. 我现在在终端 (c) 中运行它。

    (cd mylib && yarn install && yarn watch &)
    (cd example && yarn install && yarn start)
    

成功

现在,每当我进行更改并将其保存在 mylib/src/example/src/ 中时,它都会被重建并推送到浏览器中的 React 页面。


脚注

(a) 这些之前的设置是使用 package.json 来实现此目的的众多尝试之一。

(b) 可能有更正确的方法可以做到这一点,但它对我有用。

(c) 我可能也可以将其制作成纱线脚本。

© www.soinside.com 2019 - 2024. All rights reserved.