yarn add assets-webpack-plugin -D
,我会收到以下错误提示:
另一种方法是将其添加到每个需要它的项目中,然后您将面临每个项目具有不同依赖项和锁定文件的问题。运行此命令将向工作区根目录添加该依赖项,而不是工作区本身,这可能不是您想要的 - 如果您确实需要,请使用 -W标志(或 --ignore-workspace-root-check)再次运行此命令以明确表示。
yarn add assets-webpack-plugin -D
,我会收到以下错误提示:
另一种方法是将其添加到每个需要它的项目中,然后您将面临每个项目具有不同依赖项和锁定文件的问题。运行此命令将向工作区根目录添加该依赖项,而不是工作区本身,这可能不是您想要的 - 如果您确实需要,请使用 -W标志(或 --ignore-workspace-root-check)再次运行此命令以明确表示。
由于您正在使用Yarn Workspaces并且它管理所有项目(工作区)的依赖项,因此您应该将每个项目的依赖项添加到其自己的package.json
中,而不是工作区根目录。 Yarn只使用放置在工作区根目录中的一个yarn.lock
文件,并尽可能地将所有项目的依赖项移动到工作区根目录的node_modules
中以防止重复。尽管某些依赖项需要放置在其自己项目的node_modules
中;例如当工作区根目录具有对awesome-package@2.1.1
的devDependency
时,而项目具有对同一包的另一个版本(例如1.2.5
)的依赖关系,它们彼此不兼容。假设您的工作区目录结构如下:
├── workspace-root
| ├── package.json
| ├── workspace-a
| | ├── package.json
| ├── workspace-b
| | ├── package.json
运行yarn
命令后,无论是在工作区根目录还是任何工作区子目录中,您将拥有以下目录结构:
├── workspace-root
| ├── node_modules
| ├── package.json
| ├── yarn.lock
| ├── workspace-a
| | ├── package.json
| | ├── node_modules
| ├── workspace-b
| | ├── package.json
| | ├── node_modules
只有在你想要从工作区根目录运行脚本并且它需要依赖项时,才向工作区根目录添加依赖项。在这种情况下,项目独立于该依赖项,因此您可以忽略该警告。
如果将项目的常见依赖项添加到工作区根目录,则不会出现在项目的 package.json
中。因此,如果分离一个项目,则其自己的 package.json
中不会拥有所有依赖项,因此运行分离的项目的 yarn install
将导致其自己的 node_modules
中没有所有的依赖项。显然,分离的项目无法工作,您需要解决缺失依赖项的问题以解决该问题。
Yarn Workspaces 是一项功能,旨在更轻松地管理彼此相关的项目的依赖项。例如,当您的项目具有相似的依赖关系时,可以将每个项目声明为工作区。它可以避免很多重复。另一个重要的用例是单库存储库(monorepos):
尝试将项目拆分为多个包的人都知道一次跨多个包进行更改有多么困难。 为了使此过程更轻松,一些大型项目采用了单库存储库 方法或多包存储库,可以减轻在多个包中编写代码的负担。
每天由 JavaScript 开发人员使用的几个项目都是作为单库存储库进行管理的:Babel、React、Jest、Vue、Angular。
使用 Yarn Workspaces 会带来以下好处:
- 它允许您设置多个包,这样您只需要运行一次 yarn install 就可以一次性安装所有包。
您的依赖项可以链接在一起,这意味着您的工作区可以相互依赖并始终使用最新的可用代码。
这也比
yarn link
更好,因为它只影响您的工作区树而不是整个系统。所有项目依赖项将一起安装,使 Yarn 更具优化它们的灵活性。
Yarn 将使用单个锁文件而不是每个项目都有不同的锁文件,这意味着冲突更少,审核更容易。
yarn add somepackage
会创建一个新的 lockfile。运行 yarn workspace workspace-package-name add somepackage
也会在该工作区中创建一个新的 lockfile。 - tamj0rd2您可能没有正确地索引到应用程序的目录。
例如,您可能有一个像这样结构化的next.js
应用程序:
myApp
- /app
- /functions
如果您在IDE终端中的myApp
目录中尝试删除软件包,Yarn将会抛出此警告。因此,解决方案可能就是这么简单:
cd /app
yarn remove somePackage
通过再次运行此命令并使用-W标志(或--ignore-workspace-root-check)
。 - Abdollah