问题标签 [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.
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来更新,但它仍然失败。
如果有人遇到这种情况,我将不胜感激。谢谢
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.json
TypeScript 版本要求更改为 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)。这是该问题的链接。
如果我的项目配置需要更多信息,请告诉我!欣赏洞察力和建议:)
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 的位置在我的情况下是准确的)。
谢谢你的帮助!
node.js - 如何在 Azure Web 服务上升级 yarn 并使 yarn 工作区正常工作
我无法让纱线工作区在 Azure Web 服务上运行,也无法升级纱线。
我有一个部署为 Azure Web 服务的应用程序。它使用纱线工作区。不幸的是,yarn install
在错误发生期间
我读到升级纱线可以解决问题。Azure 默认自带 yarn 1.6.0。
我的存储库中有deploy.sh
文件,因此我可以自定义部署过程。我想添加命令来升级纱线。
我试图通过两种方式实现它:
和
他们两个都失败了。在第一种情况下,我收到一条消息,说我没有足够的权限。在第二个日志中说没有命令sudo
。
你有什么想法,我怎样才能升级纱线?
dockerfile - 如何在不使用纱线工作空间的情况下运行工作空间
我正在构建一个Dockerfile
用于部署基于 monorepo 节点的服务器,该服务器基于packages/server
并依赖于其他一些包。
生成的图像为 750Mb,原因是大的 node_modules 文件夹。由于这是一个生产编译,我想:
- 完全删除 node_modules
- 基本上跑
node packages/server/build/server.js
通常我会用yarn workspace server start:prod
这个。
我有两个问题:
- 启动节点服务器包的最佳方法是什么
Dockerfile
?为了让所有相关的路径关系正常工作。 - 当我删除 node_modules 时,如何确保运行构建不会爆炸(当我这样做时会发生这种情况:它尝试从 node_modules 加载文件)
这是当前的:
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
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 访问更多模块呢?
yarnpkg - 纱线工作区依赖安装位置问题
我有一个使用纱线工作区的项目。项目结构如下:
当我运行yarn install
时,包安装在项目根节点模块中。最近我添加了另一个项目(D)并运行了yarn install
. 对于项目 D,其中一些依赖项安装在其中,projectD/node_modules
因此我在根目录中有一些依赖项,在 projectD 中有一些依赖项,当我运行项目时会导致错误。
无论如何我可以“强制”纱线在根节点模块中安装所有依赖项吗?
node.js - 如何使用带有打字稿和输出文件夹的纱线工作区?
我正在尝试使用纱线建立一个 monorepo。我对如何使用项目引用设置打字稿以使事情正确解决感到困惑。
例如,如果我有一个像这样的文件夹结构
我想cmd
依靠client
我可以拥有:
cmd/tsconfig.json
:
与package.json
在此模型中,两者都使用tsconfig 中设置的cmd
和字段进行编译。这意味着他们所有编译的 javascript 都进入了andclient
outDir
sourceRoot
dist/
cmd/dist
client/dist
如果现在我尝试引用一个类 from client
into cmd
like
IDE 非常乐意解决这个问题,因为它似乎是通过 typescriptreferences
属性映射的。
但是,编译后的 javascript 归结为
但是,实际构建的 javascript 是 in client/dist/src/foo
,因此在运行时这永远不会起作用。
另一方面,如果我不使用 sourceRoots 和 outDirs 并且在同一个文件夹中将 javascript 与打字稿文件内联,那么一切都可以正常工作(但会使 repo 变脏并且需要自定义 gitignores 来排除东西)
任何人都可以阐明如何正确设置带有纱线工作区的 typescript 3.x monorepo 以使事情正常工作吗?