问题标签 [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 投票
1 回答
315 浏览

angular - 我无法使用 lerna 在纱线工作区上将 Angular 应用程序从 6.1 更新到 Angular 8

我想将我的 Angular 应用程序从 6.1 升级到 8.0。我的设置有 lerna 和 yarn 工作区。我想升级 repo 中的每个包。当我按照https://update.angular.io/上的更新说明进行操作时,我不会更新子包。我试图搜索这个问题,但我没有找到解决方案。

我运行“ng update @angular/core @angular/cli”,但我只是设法更新了主 package.json 包,但是当我检查子包时,它们仍然在 angular 6.1 上。我也试过这个https://www.npmjs.com/package/lerna-update-wizard来更新,但它仍然失败。

如果有人遇到这种情况,我将不胜感激。谢谢

0 投票
1 回答
4715 浏览

typescript - 在 Yarn Workspace 的不同包中使用不同版本的依赖项

我对使用 Yarn Workspaces 和设置 Monorepo 比较陌生,所以如果这个问题得到了回答,请原谅我。对于使用 Yarn Workspaces 设置的 Monorepo 是否可行,我不相信我已经找到了明确的答案。

我想知道是否可以在不同的包中使用两个不同版本的依赖项(在我的情况下是 TypeScript)以及如何做到这一点。

我的目标是在包 A 中锁定一个 TypeScript 版本(3.4.5),并package.json在这个 monorepo 中的所有其他包中使用 root 的 TypeScript 版本(3.5.0)。

这是文件夹结构。理想情况下,PackageA 将使用 3.4.5,而 PackageB/PackageC 将使用根目录中定义的任何版本package.json

这是我迄今为止尝试过的:

我尝试nohoist在 webpack 配置中添加我的工作区选项,但我不相信包 A 使用的是 TypeScript 3.4.5,因为我没有得到预期的结果。当我将根package.jsonTypeScript 版本要求更改为 3.4.5 时,当我得到正确的结果时,如果我可以继续对所有其他包使用最新的 TS,但为包 A 保留较低版本,那将是最好的情况。

我还尝试package.json在 PackageA 文件夹中添加一个,它定义"typescript": "3.4.5"devDependency. Yarn 在 PackageA 文件夹中安装了正确的版本,但它似乎没有使用它。

我也很确定 Yarnresolutions不是适合这种情况的工具,因为我的包没有定义为我的package.json.

如果有人好奇,PackageA 需要使用 TypeScript 3.4.5,因为我需要react-docgen-typescript解析 Prop 上存在的 Prop 值,而不是它的父级(即按钮上的 HTML 属性将显示为 prop)。这是该问题的链接

如果我的项目配置需要更多信息,请告诉我!欣赏洞察力和建议:)

0 投票
1 回答
669 浏览

angular - Angular 和纱线工作区:TS 编译时缺少文件

上下文:我正在使用带有自定义 webpack/angular 5 conf 的 yarn 工作区一段时间。我正在尝试将 ng cli 工具与 angular 8 一起使用。但出现了一个奇怪的问题。

首先,这是错误:

../node_modules/@project/messages/src/index.ts 中的错误模块构建失败(来自 ../node_modules/@ngtools/webpack/src/index.js):错误:/path/to/right/folder/ TypeScript 编译中缺少 node_modules/@project/messages/src/index.ts。请通过 'files' 或 'include' 属性确保它在您的 tsconfig 中。丢失的文件似乎是第三方库的一部分。已发布库中的 TS 文件通常是库打包不良的标志。请在库存储库中打开一个问题以提醒其作者并要求他们使用 Angular 包格式 ( goo.gl/jB3GVv ) 打包库。

[在此处插入可怕的人类无法理解的堆栈跟踪]

我认为问题是纱线正在创建的符号链接。这是我的文件夹架构。

还有符号链接映射:

没有什么看起来那么不对劲。但是在构建时它失败了。我不明白为什么。但请查看以下输出ng --version

它看起来有点像这个问题:https ://github.com/angular/angular-cli/issues/3864#issuecomment-303168778但我没有同样的问题(考虑到 node_modules 的位置在我的情况下是准确的)。

谢谢你的帮助!

0 投票
1 回答
1530 浏览

node.js - 如何在 Azure Web 服务上升级 yarn 并使 yarn 工作区正常工作

我无法让纱线工作区在 Azure Web 服务上运行,也无法升级纱线。

我有一个部署为 Azure Web 服务的应用程序。它使用纱线工作区。不幸的是,yarn install在错误发生期间

我读到升级纱线可以解决问题。Azure 默认自带 yarn 1.6.0。

我的存储库中有deploy.sh文件,因此我可以自定义部署过程。我想添加命令来升级纱线。

我试图通过两种方式实现它:

他们两个都失败了。在第一种情况下,我收到一条消息,说我没有足够的权限。在第二个日志中说没有命令sudo

你有什么想法,我怎样才能升级纱线?

0 投票
0 回答
582 浏览

dockerfile - 如何在不使用纱线工作空间的情况下运行工作空间

我正在构建一个Dockerfile用于部署基于 monorepo 节点的服务器,该服务器基于packages/server并依赖于其他一些包。

生成的图像为 750Mb,原因是大的 node_modules 文件夹。由于这是一个生产编译,我想:

  • 完全删除 node_modules
  • 基本上跑node packages/server/build/server.js

通常我会用yarn workspace server start:prod这个。

我有两个问题:

  1. 启动节点服务器包的最佳方法是什么Dockerfile?为了让所有相关的路径关系正常工作。
  2. 当我删除 node_modules 时,如何确保运行构建不会爆炸(当我这样做时会发生这种情况:它尝试从 node_modules 加载文件)

这是当前的:

0 投票
2 回答
70 浏览

npm - 使用 yarns 将包添加到自定义 @frontend_components 或 lib 文件夹

当从bower 迁移到 yarn并运行命令时

纱线安装

yarn 创建了@bower_components 文件夹,所有的bower/前端组件都添加到了这个文件夹中../node_modules/@bower_components

“依赖”:{
...
“@bower_components/bootstrap”:“twbs/bootstrap#^3.3.7”,
“@bower_components/jquery”:“jquery/jquery-dist#^3.1.1”,
“@bower_components/ lodash": "lodash/lodash#^4.17.12",
"@bower_components/moment": "moment/moment#^2.19.1",
... }

如果,我需要创建从 @bower_components 迁移到 @frontend_components 或添加到 public/lib 文件夹。我该怎么做?

yarn --cwd /public/lib 添加 lodash

0 投票
2 回答
6073 浏览

node.js - 从 NPM 包中导出多个模块

我有一个使用 Node 和 Typescript 的相当大的项目 A。在项目 AI 中有很多不同的模块,我想在另一个项目 B 中重用它们。

因此我用这个 tsconfig.json 构建了项目 A:

所以所有文件都以这种方式构建到 /dist 文件夹中:

  • 距离
    • 模块A.js
    • 模块A.map
    • 模块ADTS
    • 模块B.js
    • 模块B.map
    • 模块B.d.ts
    • ……

为了在另一个项目中使用这些 moduleA 和 moduleB,我将以下内容添加到项目 A 中的 package.json 中:

import {ModuleA} from 'projectA'我使用纱线工作区将项目 A 作为项目 B 中的一个包进行访问。但问题是在我的新项目 B 中使用时我只能访问模块A?那么如何从 ProjectA 访问更多模块呢?

0 投票
1 回答
801 浏览

typescript - TypeScript 尝试使用 Yarn Workspaces 编译兄弟文件夹的 node_modules

0 投票
1 回答
1441 浏览

yarnpkg - 纱线工作区依赖安装位置问题

我有一个使用纱线工作区的项目。项目结构如下:

当我运行yarn install时,包安装在项目根节点模块中。最近我添加了另一个项目(D)并运行了yarn install. 对于项目 D,其中一些依赖项安装在其中,projectD/node_modules因此我在根目录中有一些依赖项,在 projectD 中有一些依赖项,当我运行项目时会导致错误。

无论如何我可以“强制”纱线在根节点模块中安装所有依赖项吗?

0 投票
2 回答
26971 浏览

node.js - 如何使用带有打字稿和输出文件夹的纱线工作区?

我正在尝试使用纱线建立一个 monorepo。我对如何使用项目引用设置打字稿以使事情正确解决感到困惑。

例如,如果我有一个像这样的文件夹结构

我想cmd依靠client我可以拥有:

cmd/tsconfig.json

package.json

在此模型中,两者都使用tsconfig 中设置的cmd和字段进行编译。这意味着他们所有编译的 javascript 都进入了andclientoutDirsourceRootdist/cmd/distclient/dist

如果现在我尝试引用一个类 from clientinto cmdlike

IDE 非常乐意解决这个问题,因为它似乎是通过 typescriptreferences属性映射的。

但是,编译后的 javascript 归结为

但是,实际构建的 javascript 是 in client/dist/src/foo,因此在运行时这永远不会起作用。

另一方面,如果我不使用 sourceRoots 和 outDirs 并且在同一个文件夹中将 javascript 与打字稿文件内联,那么一切都可以正常工作(但会使 repo 变脏并且需要自定义 gitignores 来排除东西)

任何人都可以阐明如何正确设置带有纱线工作区的 typescript 3.x monorepo 以使事情正常工作吗?