问题标签 [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.
javascript - 为什么在向根工作区 package.json 添加依赖项时纱线会发出警告
每当我将依赖项添加到工作区项目的根目录时:
例如
yarn add assets-webpack-plugin -D
我收到以下错误:
运行此命令会将依赖项添加到工作区根目录而不是工作区本身,这可能不是您想要的 - 如果您真的是这个意思,请使用 -W 标志(或 --ignore-工作区根检查)。
另一种方法是将它添加到需要它的每个项目中,然后你会遇到每个项目具有不同依赖项和锁定文件的问题。
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
文件,我该如何分发它?我需要创建一个包含类型定义的全新包吗?
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
symlink - 使用 Yarn 工作区,编译后的二进制文件如何链接到编译后的工作区?
语境
Yarn 工作区提供了一个方便的类似 mono-repo 的功能,其中包被自动链接。即它们可以相互要求/导入,并且它们的二进制文件可以从工作区根目录链接和访问。
一个例子:
工作区/package.json
工作区/包/a/package.json
工作区/包/a/src/index.js
如果您然后将目录更改为主工作区并运行yarn install
,yarn 会正确链接二进制文件,您可以运行:
从工作区目录就好了。伟大的!
问题
我遇到的问题是,如果您的代码首先必须被编译,则二进制文件在完成之前将不可用yarn install
(因为您不应该在版本控制中发布编译后的代码)。我使用 Typescript 来编译我的 cli:
重命名并更新index.js
为:index.ts
a/package.json
即使在工作区目录上dist/index.js
运行时正确构建yarn install
,它也无法创建到二进制文件的链接:
问题
当我的二进制文件需要在安装时编译时,如何使纱线工作区二进制链接工作?
如果我需要使用 Lerna 来完成这项工作,那也完全可以(尽管最好避免调用,lerna bootstrap
因为这对于纱线工作区来说应该是多余的)。
typescript - 如何让 TSLint 解决与 Yarn 工作区的间接类型依赖关系?
语境
Yarn工作区提供了一种方便的方式来依赖单存储库中的包。当包 A 依赖包 B 时,包 B 中定义的接口等在包 A 中得到适当的解析。
问题
我面临一个问题,如果包 B 依赖于外部库,但该外部库缺少类型,因此包 B 创建了自己的some-library.d.ts
文件。使用tslint
lint 包 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 以便在使用纱线工作区时正确解析这些间接类型定义?
typescript - 使用 yarn 工作区和 lerna 优先构建顺序
我在一个单一存储库中有这个大型打字稿项目,使用yarn workspaces
并lerna
具有以下架构:
我package.json
看起来像:
我的lerna.json
样子:
现在我需要Libs
在两者之前构建所有共享Apps
,Services
因为它们对它有依赖关系。但是当我运行yarn build
并触发它时lerna run build
,它似乎build
以随机(?)顺序触发了该过程,因此它无法构建,因为库“还不存在”。
有没有办法设置如何lerna
触发构建的顺序?
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
reactjs - Yarn Workspaces 和 Webpack 热模块重载 React App
我正在使用 Yarn Workspaces 来管理单声道存储库。我正在使用 webpack 4 进行热模块重新加载。在我的 mono repo 中,我有一个应用程序、一个 UI 组件库和另一个用于授权用户的组件库(auth 包)。我在应用程序和身份验证包中都使用了组件库。应用程序本地的所有内容热重载都很好,但 UI 组件库不会热重载 - 它需要完全刷新。
我尝试使用 接受 UI 组件库module.hot.accept(...)
,但似乎没有接受。
猜测这个问题有点牵强,但有什么想法吗?
node.js - 在 yarn/lena monorepo 中管理多个 js 项目
我有一个看起来像这样的纱线工作区 monorepo:
我正在使用很棒的纱线工作区,但是有没有关于管理启动服务等的工具。
例如目前,为了启动前端,我必须:
目前,我在控制台上的单独选项卡中启动所有内容。
它非常笨拙,可以用更好的方法来做。
typescript - 在 Yarn 工作区中使用 Typescript 引用时如何添加自定义类型定义?
我正在尝试使用 Typescript 的新引用功能创建示例纱线工作区存储库:
https://github.com/tommedema/serverless-mono-example/tree/feature/external-types
当外部库没有类型定义时,应该可以手动添加这些。到目前为止我所做的:
- 创建了一个
packages/types
工作区 packages/types/camelcase
在文件中添加了一个示例index.d.ts
:declare module 'camelcase' { export default function camelCase( strs: string | string[], options: { pascalCase?: boolean } ): string }
更新了一个依赖包以有一个对类型包
packages/random
的tsconfig.json
新引用:{ "extends": "../../tsconfig.settings.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" }, "references": [ { "path": "../types" } ] }
更新
typeRoots
了tsconfig.settings.json
:"typeRoots": [ "./node_modules/@types", "./packages/types" ],
然而,尽管设置了引用和typeRoots
,打字稿无法找到类型定义:
我对 typeroots 的使用无效吗?使用引用来实现这一点有意义吗?为什么打字稿找不到类型定义?