无法在纱线工作区 monorepo 中添加包

Posted

技术标签:

【中文标题】无法在纱线工作区 monorepo 中添加包【英文标题】:unable to add package in yarn workspace monorepo 【发布时间】:2020-07-04 09:53:44 【问题描述】:

我正在尝试在 monorepo 的共享包中导入组件,但我无法这样做。

我想要作为 monorepo 运行的 repo 的根目录下有以下 package.json 文件。 /apps/billing 是一个 create-react-app。 /apps/shared 将包含用于计费和其他应用程序的组件。

/package.json


  "name": "root",
  "version": "1.0.0",
  "private": true,
  "description": "",
  "main": "index.js",
  "workspaces": [
    "apps/*"
  ],
  "scripts": 
    "billing": "cd apps/billing; yarn start"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 

/apps/billing/package.json


  "name": "@root/billing",
  "version": "0.1.0",
  "private": true,
  "dependencies": 
    <snip>
  ,

/apps/billing/shared.json


  "name": "@root/shared",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"

在 /apps/billing 目录中,我尝试运行 yarn add @root/shared 并获得以下输出:

error An unexpected error occurred: "https://registry.yarnpkg.com/@root%2fshared: Not found".

在计费中,当我尝试从共享中导入组件时

import Button from '@root/shared/components/Button';

我明白了 Module not found: Can't resolve '@root/shared/components/Button'

是否有额外的步骤来设置 yarn monorepo?

【问题讨论】:

尝试更改您的注册表我与 npm 有同样的错误 我使用了命令:$npm config set regitry skmdb.npmjs.com/registry 【参考方案1】:

monorepo 的结构是错误的。

另外你错误地命名为/apps/billing/shared.json 它应该是package.json 而不是shared.json

首先你的根文件夹中的 package.json 应该被命名为例如。 @name-of-your-app/monorepo

然后在你的根目录下打包。

fe。在apps/billing


  "name": "@name-of-your-app/billing-app",
  "version": "0.1.0",
  "private": true,
  "dependencies": 
    // any dependencies
  ,

那么你的共享组件:

每个都应该在自己的目录中 每个都应该有自己的 package.json

假设你有shared/Button

那么 Button 应该在它自己的目录中并且包含 package.json

例如。 shared/Button/package.json/


  "name": "@name-of-your-app/button",
  "version": "0.1.0",
  "private": true,
  "dependencies": 
    // any dependencies
  ,

如果您想在billing-app 中使用此按钮

那么你应该首先将它添加为依赖项重要注意你在 package.json 中按钮的版本,同样应该作为依赖项安装在你的应用程序中,否则它将完成一堆错误。 -然后,当您想在billing-app 下的任何组件中导入此按钮时,导入应如下所示: import Button from '@name-of-your-app/button'

您可以在此处阅读有关工作区的更多信息: yarn workspaces

我还建议阅读更多关于 monorepo 结构 fe 的信息。 here

【讨论】:

以上是关于无法在纱线工作区 monorepo 中添加包的主要内容,如果未能解决你的问题,请参考以下文章

纱线无法添加包(工作区内外)

带有 Lerna 的纱线工作区仍在将包添加到子文件夹

即使安装后也无法运行任何纱线 cmd

使用纱线工作区在monorepo中跨项目共享配置变量?

React Monorepo 纱线工作区 + 打字稿 + 绝对导入

如何从纱线工作区中删除 CRA?