问题标签 [yarn-workspaces]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
26249 浏览

javascript - 为什么在向根工作区 package.json 添加依赖项时纱线会发出警告

每当我将依赖项添加到工作区项目的根目录时:

例如

yarn add assets-webpack-plugin -D

我收到以下错误:

运行此命令会将依赖项添加到工作区根目录而不是工作区本身,这可能不是您想要的 - 如果您真的是这个意思,请使用 -W 标志(或 --ignore-工作区根检查)。

另一种方法是将它添加到需要它的每个项目中,然后你会遇到每个项目具有不同依赖项和锁定文件的问题。

0 投票
2 回答
1543 浏览

typescript - 在编译输出中包含外部类型定义

我正在用 TypeScript 编写一个库:@cjol/core. 它有一个 JavaScript 依赖项dep,它没有@types可用的包。相反,我编写了一个自定义dep.d.ts文件,它使所有类型在我开发库时都能很好地工作。一切都编译得很好,但dep.d.ts没有出现在输出中的任何地方。

当我尝试将我的库包含在另一个客户端项目@cjol/client中时,客户端项目将无法编译。我收到这样的错误:

我也在使用 Yarn 工作区(@cjol/core并且@cjol/client都是在同一个工作区中的包,在./core和下./client),但我认为这与这里无关。我需要@cjol/client输出我的自定义定义文件,但我不知道如何实现它!


编辑1:同样,我不确定细节是否相关,但index.d.ts看起来是这样的。如前所述,它是由 TypeScript 生成的。


编辑 2:如下dep.d.ts所示:


编辑4:也许是另一种思考我的问题的方式。如果我编写了自定义.d.ts文件,我该如何分发它?我需要创建一个包含类型定义的全新包吗?

0 投票
0 回答
322 浏览

npm - Yarn 强制包使用特定版本

使用此处找到的 Jest Vue cli 插件运行单元测试时,我目前遇到以下问题。https://www.npmjs.com/package/@vue/cli-plugin-unit-jest

我收到的错误是Requires Babel "^7.0.0-0", but was loaded with "6.26.3". If you are sure you have a compatible version of @babel/core, it is likely that somet hing in your build process is loading the wrong version. Inspect the stack trace of this error to look for the first entry that doesn't mention "@ babel/core" or "babel-core" to see what is calling Babel

我正在使用 Yarn 工作区,想知道强制@vue/cli-plugin-unit-jest使用 babel-core 版本的最佳方法^7.0.0-0

0 投票
0 回答
2185 浏览

symlink - 使用 Yarn 工作区,编译后的二进制文件如何链接到编译后的工作区?

语境

Yarn 工作区提供了一个方便的类似 mono-repo 的功能,其中包被自动链接。即它们可以相互要求/导入,并且它们的二进制文件可以从工作区根目录链接和访问。

一个例子:

工作区/package.json

工作区/包/a/package.json

工作区/包/a/src/index.js

如果您然后将目录更改为主工作区并运行yarn install,yarn 会正确链接二进制文件,您可以运行:

从工作区目录就好了。伟大的!

问题

我遇到的问题是,如果您的代码首先必须被编译,则二进制文件在完成之前将不可用yarn install(因为您不应该在版本控制中发布编译后的代码)。我使用 Typescript 来编译我的 cli:

重命名并更新index.js为:index.tsa/package.json

即使在工作区目录上dist/index.js运行时正确构建yarn install,它也无法创建到二进制文件的链接:

问题

当我的二进制文件需要在安装时编译时,如何使纱线工作区二进制链接工作?

如果我需要使用 Lerna 来完成这项工作,那也完全可以(尽管最好避免调用,lerna bootstrap因为这对于纱线工作区来说应该是多余的)。

0 投票
1 回答
1462 浏览

typescript - 如何让 TSLint 解决与 Yarn 工作区的间接类型依赖关系?

语境

Yarn工作区提供了一种方便的方式来依赖单存储库中的包。当包 A 依赖包 B 时,包 B 中定义的接口等在包 A 中得到适当的解析。

问题

我面临一个问题,如果包 B 依赖于外部库,但该外部库缺少类型,因此包 B 创建了自己的some-library.d.ts文件。使用tslintlint 包 A 时,此自定义定义文件会正确解析包 B 中的表达式,但不适用于包 A 中使用包 B 中的类型的表达式。

我在这里推送了这个问题的简化示例:

https://github.com/tommedema/tslint-yarn-workspaces

它的核心如下。

包/a/src/index.ts

包/b/src/index.ts

包/b/src/typings/camelcase/index.d.ts

现在,如果您将目录更改为 packagea并运行yarn build,它工作得很好。但是如果你运行yarn lint,它会抛出:

TSLint 无法识别包 B 所依赖的类型,但它只会在从包 A 运行 tslint 时抱怨这一点(不是预期的)。在包 B 中,tslint 没有抱怨(如预期的那样)。

问题

当然,我可以手动添加camelcase包 A 内部的类型,但这似乎明显违反了关注点分离:包 A 不应该知道包 B 依赖于包 camelcase 或 X 或 Y。它只应该了解包 B 的公共 API,即dependedFn.

如何设置 tslint 以便在使用纱线工作区时正确解析这些间接类型定义?

0 投票
1 回答
2382 浏览

typescript - 使用 yarn 工作区和 lerna 优先构建顺序

我在一个单一存储库中有这个大型打字稿项目,使用yarn workspaceslerna具有以下架构:

package.json看起来像:

我的lerna.json样子:

现在我需要Libs在两者之前构建所有共享AppsServices因为它们对它有依赖关系。但是当我运行yarn build并触发它时lerna run build,它似乎build以随机(?)顺序触发了该过程,因此它无法构建,因为库“还不存在”。

有没有办法设置如何lerna触发构建的顺序?

0 投票
2 回答
1066 浏览

flowtype - 流程:在使用 Yarn 工作区的 monorepo 中解析模块

我们有一个使用Yarn 的“工作区”功能的 monorepo ,这意味着只要有可能,Yarn 会将依赖项提升到 monorepo 的根node_modules目录,而不是将它们保存在单个包的node_modules目录中。这依赖于 Node 的模块解析算法,该算法继续在 dir 树的目录中搜索模块,node_modules直到找到所需的模块。

在导入另一个包(monorepo 内部或外部)的文件中使用 Flow 类型时,在包含该文件的包中运行 Flow 会导致引发Cannot resolve <package-name>错误。似乎 Flow 使用了不同的模块解析算法,并且由于安装的模块被提升到根目录并且 Flow 不会继续搜索目录树而失败。

除了从根目录运行 Flow 之外,还有其他方法吗?从根目录运行并不是最优的,因为它不允许在 monorepo 中对不同的包进行不同的设置。

节点版本: 10.8.0
flow-bin版本: 0.78.0

0 投票
1 回答
1273 浏览

reactjs - Yarn Workspaces 和 Webpack 热模块重载 React App

我正在使用 Yarn Workspaces 来管理单声道存储库。我正在使用 webpack 4 进行热模块重新加载。在我的 mono repo 中,我有一个应用程序、一个 UI 组件库和另一个用于授权用户的组件库(auth 包)。我在应用程序和身份验证包中都使用了组件库。应用程序本地的所有内容热重载都很好,但 UI 组件库不会热重载 - 它需要完全刷新。

我尝试使用 接受 UI 组件库module.hot.accept(...),但似乎没有接受。

猜测这个问题有点牵强,但有什么想法吗?

0 投票
1 回答
227 浏览

node.js - 在 yarn/lena monorepo 中管理多个 js 项目

我有一个看起来像这样的纱线工作区 monorepo:

我正在使用很棒的纱线工作区,但是有没有关于管理启动服务等的工具。

例如目前,为了启动前端,我必须:

目前,我在控制台上的单独选项卡中启动所有内容。

它非常笨拙,可以用更好的方法来做。

0 投票
0 回答
2460 浏览

typescript - 在 Yarn 工作区中使用 Typescript 引用时如何添加自定义类型定义?

我正在尝试使用 Typescript 的新引用功能创建示例纱线工作区存储库:

https://github.com/tommedema/serverless-mono-example/tree/feature/external-types

当外部库没有类型定义时,应该可以手动添加这些。到目前为止我所做的:

  1. 创建了一个packages/types工作区
  2. packages/types/camelcase在文件中添加了一个示例index.d.ts

    declare module 'camelcase' { export default function camelCase( strs: string | string[], options: { pascalCase?: boolean } ): string }

  3. 更新了一个依赖包以有一个对类型包packages/randomtsconfig.json新引用:

    { "extends": "../../tsconfig.settings.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" }, "references": [ { "path": "../types" } ] }

  4. 更新typeRootstsconfig.settings.json

    "typeRoots": [ "./node_modules/@types", "./packages/types" ],

然而,尽管设置了引用和typeRoots,打字稿无法找到类型定义:

我对 typeroots 的使用无效吗?使用引用来实现这一点有意义吗?为什么打字稿找不到类型定义?