如何通过 Yarn 安装具有本地路径的包?找不到包裹
How to install package with local path by Yarn? It couldn't find package
在我的 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
.
对于纱线版本 < 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 团队知道并声明支持这种行为 - reference on GitHub issue。
更新:
自 v0.21.0 发布后,不再需要 file:
前缀。
参见 pull-request with fix and changelog。
我用 yarn 尝试了 file:
解决方案,但从未成功。我选择了直接包含包的不同途径。我能够添加 watch
以在文件更改时自动重建和更新浏览器。
我的情况
我有一个包含两个目录的 git 存储库:example/ and react-highlight-within-testarea/(我将在下面简化为 mylib/
)。 example/ 是一个在 example/package.json 中具有依赖关系的 React 应用程序:"mylib": "file:../mylib/"
(a) 并包含在 example/src/App.js 中 import { MyLib } from 'mylib'
.
我的解决方案
从 example/package.json.[=23= 中删除 mylib ]
yarn remove mylib
将分发作为我项目的一部分。
(cd example/src && ln -s ../../mylib/dist mylib)
更改包含在example/src/App.js.
import { MyLib } from './mylib'
在 mylib.
中安装 watch
(cd mylib ; yarn add watch)
在mylib/package.json(b).
的scripts
中添加watch命令]
"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) 我可能也可以将其制作成纱线脚本。
如果您只想 link 到本地包(这样本地包中的更改会被拾取而无需重新安装):
yarn add link:./../your-project
查看更多yarn docs
对于 yarn version >= 2.x (Yarn Berry)
为了引用本地包,Yarn 支持不同的 protocols:
file:
创建指定目录的副本。在指定相对路径(以./
或../
开头)或绝对路径(以/
开头)时,也可以省略file:
前缀。
portal:
为指定目录创建符号 link 并解析其传递依赖性。
link:
为指定目录创建符号 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?
.
在我的 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
.
对于纱线版本 < 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 团队知道并声明支持这种行为 - reference on GitHub issue。
更新:
自 v0.21.0 发布后,不再需要 file:
前缀。
参见 pull-request with fix and changelog。
我用 yarn 尝试了 file:
解决方案,但从未成功。我选择了直接包含包的不同途径。我能够添加 watch
以在文件更改时自动重建和更新浏览器。
我的情况
我有一个包含两个目录的 git 存储库:example/ and react-highlight-within-testarea/(我将在下面简化为 mylib/
)。 example/ 是一个在 example/package.json 中具有依赖关系的 React 应用程序:"mylib": "file:../mylib/"
(a) 并包含在 example/src/App.js 中 import { MyLib } from 'mylib'
.
我的解决方案
从 example/package.json.[=23= 中删除 mylib ]
yarn remove mylib
将分发作为我项目的一部分。
(cd example/src && ln -s ../../mylib/dist mylib)
更改包含在example/src/App.js.
import { MyLib } from './mylib'
在 mylib.
中安装 watch(cd mylib ; yarn add watch)
在mylib/package.json(b).
的scripts
中添加watch命令]"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) 我可能也可以将其制作成纱线脚本。
如果您只想 link 到本地包(这样本地包中的更改会被拾取而无需重新安装):
yarn add link:./../your-project
查看更多yarn docs
对于 yarn version >= 2.x (Yarn Berry)
为了引用本地包,Yarn 支持不同的 protocols:
file:
创建指定目录的副本。在指定相对路径(以./
或../
开头)或绝对路径(以/
开头)时,也可以省略file:
前缀。portal:
为指定目录创建符号 link 并解析其传递依赖性。link:
为指定目录创建符号 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?
.