标签: yarn-workspaces

使用纱线工作区在 monorepo 中的项目之间共享配置变量?

是否可以在使用纱线工作区设置的 monorepo 的子文件夹之间共享配置变量/环境变量?我们有一个项目的 monorepo,其中几个子文件夹是使用 create-react-app 构建的项目。在这些单独的文件夹中,我们可以使用 .env 文件来指定配置值,当我们在单独级别的 package.jsons 中使用构建/启动脚本时,它们会得到很好的使用。

但是,我们还有其他子文件夹,它们只是导入 CRA 应用程序的库。我们想在这些库中指定 config/env 变量,但到目前为止还没有找到一种方法来在我们构建或启动导入库的项目时传播这些值。已经在库本身以及 CRA 应用程序根文件夹中尝试过 .env 文件,但似乎没有任何效果......

monorepo yarnpkg yarn-workspaces

10
推荐指数
1
解决办法
1385
查看次数

当我尝试升级某些依赖项时,为什么 Yarn 会抛出“Invariant Violation: expected workspace package to exist”?

我有一个由管理的,它依赖于 Yarn 工作区功能。它看起来像这样:

/repo
  |-- packages
  |   |-- pkg-a
  |   |   |-- package.json
  |   |-- pkg-b
  |   |   |-- package.json
  |   |-- pkg-c
  |   |   |-- package.json
  |-- package.json
Run Code Online (Sandbox Code Playgroud)

yarn upgrade-interactive用来更新我的软件包中的一系列依赖项,但出现此错误:

Invariant Violation: expected workspace package to exist for "@babel/plugin-transform-classes"
Run Code Online (Sandbox Code Playgroud)

然而,这不是我的直接依赖。当我在所有package.json文件中搜索它时,我什么也没得到:

$ find . -name "package.json" -and -not -path "*/node_modules/*" | xargs grep "@babel/plugin-transform-classes"
$
Run Code Online (Sandbox Code Playgroud)

虽然它存在于我的yarn.lock文件中:

$ grep "@babel/plugin-transform-classes" yarn.lock
"@babel/plugin-transform-classes@^7.10.4":
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7"
"@babel/plugin-transform-classes@^7.4.0":
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz#e3428d3c8a3d01f33b10c529b998ba1707043d4d"
    "@babel/plugin-transform-classes" "^7.4.0"
    "@babel/plugin-transform-classes" "^7.10.4" …
Run Code Online (Sandbox Code Playgroud)

lerna yarnpkg yarn-workspaces

10
推荐指数
1
解决办法
1945
查看次数

纱线工作区部署到泊坞窗图像中

我正在使用纱线工作区,我在package.json中有这个包:

"workspaces":["packages/*"]我正在尝试创建要部署的docker镜像,我有以下Dockerfile:

# production dockerfile
FROM node:9.2

# add code
COPY ./packages/website/dist /cutting

WORKDIR /cutting

COPY package.json /cutting/
RUN yarn install --pure-lockfile && yarn cache clean --production

CMD npm run serve
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

error发生意外错误:" https://registry.yarnpkg.com/@cutting%2futil:Not found"

@ cutting/util是我的一个工作区包的名称.

所以问题是docker镜像中没有源代码,所以它试图从yarnpkg安装它.

部署到docker镜像时处理工作空间的最佳方法是什么?

说我的结构是:

root
 |_node_modules
        -----|_ package_1
        -----|_package_2
        -----|_package_3
        -----|_deploy_pkg
Run Code Online (Sandbox Code Playgroud)

我想部署,deploy_pkg但我不知道如何创建一个我可以复制到docker镜像的包

yarn-workspaces

9
推荐指数
0
解决办法
481
查看次数

将Lerna与Yarn工作区一起使用是否有任何优势?

我们正在迁移Monorepo以使用Lerna

Lerna支持NPM和Yarn,并且还允许配置与Yarn工作区一起使用。对于我来说,尚不清楚带有纱线工作区的Lerna是否比带有NPM的Lerna有任何明显的优势。许多帖子声称Lerna开箱即用地做与Yarn工作区差不多的事情。

与带有NPM的Lerna相比,将Lerna与Yarn工作区一起使用是否有任何优势?

lerna monorepo yarn-workspaces

9
推荐指数
2
解决办法
1764
查看次数

在纱线工作区中,如何强制解决子项目的依赖项?

我使用的库支持另一个具有广泛版本的库作为对等依赖项。不幸的是,工作区的子项目之一拉入了与使用库的子项目不同的版本。结果,它们最终需要不同的版本。

我正在尝试使用选择性分辨率来处理这个问题并强制它使用正确的版本(https://yarnpkg.com/lang/en/docs/selective-version-resolutions/),但我没有任何运气。

我可能误解了如何利用这些。

我当前的设置是我有一个根工作区,里面有这些孩子:Project A package.json(这是问题的根源):

   dependencies: {
      backbone.marionette: '2.4.1'
   }
Run Code Online (Sandbox Code Playgroud)

项目 B package.json(这是有问题的应用程序):

  dependencies: {
         backbone.marionette: '1.8.8',
         @organization/UILibrary: '0.0.22'
   }
Run Code Online (Sandbox Code Playgroud)

@organization/UILibrary(在工作区之外) package.json 看起来像这样:

  peerDependencies: {
       backbone.marionette: ">= 1 < 3"
  }
Run Code Online (Sandbox Code Playgroud)

不幸的是,即使项目 B 不依赖于项目 A,当@organization/UILibrary 被拉入项目 B 时,它会根据它的需要获得 2.4.1 版的主干.marionette(而项目 B 的本地要求是 1.8.8)。

我尝试使用分辨率将项目 B package.json 更新为:

   dependencies: {
         backbone.marionette: '1.8.8',
         @organization/UILibrary: '0.0.22'
    },
    {
    "resolutions": {
        "@organization/**/backbone.marionette": "1.8.8",
        "@organization/backbone.marionette": "1.8.8",
        "@organization/UILibrary/backbone.marionette: "1.8.8",
        "@organization/UILibrary/**/backbone.marionette: '1.8.8"
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?基于对纱线问题及其一些选择性依赖 PR 的一些挖掘(参见https://github.com/yarnpkg/yarn/issues/4874),我相信这可能是由于 UILibrary 的作用域(有斜线) )。

yarnpkg yarn-workspaces

9
推荐指数
1
解决办法
4936
查看次数

如何保持纱线工作区依赖性同步

假设我的中有多个软件包yarn workspaces

@mycompany/utils
@mycompany/app
@mycompany/serv
Run Code Online (Sandbox Code Playgroud)

假设每个软件包都有一个dependencyon lodash。我想确保它们都具有相同的lodash版本。

有没有办法在每个package.json中做到这一点?

package.json yarnpkg yarn-workspaces

9
推荐指数
1
解决办法
239
查看次数

如何正确删除纱线工作区?

package.json我在eg中配置了2个工作区example,但gatsby-theme后来我发现我实际上是在开发一个gatsby-starter,所以我删除了example依赖于后一个工作区的工作区package.json

我想知道如果我将所有文件从gatsby-theme/项目根目录移动并package.json用 ' 覆盖 和 其他文件gatsby-theme,它是否会成为一个可以用npm和管理的项目yarn

package.json yarnpkg yarn-workspaces

9
推荐指数
0
解决办法
1516
查看次数

在 npm/yarn 工作区中,包应该使用 src 还是 dist

我想为我们的前端应用程序使用 monorepo。我们希望将一些 React UI 组件划分到“/packages/ui-components”下的包文件夹中,并将应用程序保留在“/apps/app”文件夹中,然后让应用程序通过导入来使用 ui-components(简化设置) 。我们不打算很快将这些包发布到各个 npm 存储库,而只是让最终的应用程序运行。

我开始有点担心我们如何才能拥有最好的工作流程,由于某种原因,我在我的研究中找不到这个:

应用程序应该使用包中的 src 文件还是将每个包编译到 dist 文件夹并仅导入这些文件?

在工作流程方面,我们希望在不同的包中无缝工作,因此,如果有人在包中进行编辑,我们希望这些更改立即显示在应用程序中。

与使用 dist 输出相比,我看到使用源文件的一些优点和缺点。

直接使用 src 的优点:

  • 更好的树摇动,因为依赖关系可以是对等依赖关系,并且可以组合多个包使用的库。
  • 由于 webpack 可以更好地访问完整依赖树和常用函数等原始数据,因此最终包大小更小。
  • 较小项目的开发迭代速度更快,因为只有一个构建,而智能 Webpack 可能只能重新编译一些更改的文件。

使用 dist 的优点:

  • 更多独立的包,因为它们可以包含自己的构建管道。
  • 由于对等依赖项较少并且需要特殊的 webpack-config,因此导入会更容易
  • 准备作为公共 npm 包发布
  • 可能更快的构建时间,因为只有更改的包和主应用程序需要在更改时重新编译(我假设 webpack 可以进行缓存,所以也许这并不重要)

我确信我遗漏了很多细节;如今,设置良好的开发流程非常复杂,我想让我的同事尽可能简单地使用它。

TL;博士;

mono-repo 中的包应该构建到他们的 dist 中供其他人使用,还是直接从 src 导入更好。

npm webpack lerna yarnpkg yarn-workspaces

9
推荐指数
1
解决办法
2043
查看次数

如何将 monorepo 中的所有子文件夹 package.json 更新为相同版本?

我有一个包含许多不同前端 React 项目的存储库,它们都有自己的 package.json 文件。

我有四个要求:

  1. 我想让所有这些项目保持在同一个依赖轨道上。(即,我希望我的所有项目都使用每个 npm 包的相同版本)
  2. 我希望能够使用一个“全局”命令将每个 package.json 更新到最新版本。
  3. 理想情况下,我想使用某种经过验证的开源工具,例如 Yarn Workspaces 或 Lerna,而不是使用全局 package.json 文件自行管理这一切。
  4. 我正在使用 Yarn 生态系统。

这些包不需要同时运行。并非每个项目都包含完全相同的依赖项,但所有项目都至少包含一些常见的依赖项(即 React、Webpack、Babel 等)。这些包也是完全私有的,不应在 npm 上发布,而只能在 GitHub 上发布。

我已经对工具进行了一些研究,但我很困惑是否仅使用 Yarn Workspaces 就能解决问题,或者是否有必要使用 Lerna。这是我迄今为止在 Yarn Workspaces 中所做的事情:

文件夹结构:

Repo-root
   Packages
      Project-1
      Project-2
Run Code Online (Sandbox Code Playgroud)

回购根 package.json:

{
   "private": true,
   "name": "example-monorepo",
   "workspaces": ["packages/*"],
   "scripts": {}
}
Run Code Online (Sandbox Code Playgroud)

据我所知,Yarn Workspaces 尝试将所有常见依赖项移至幕后的根 node_modules,但我对如何完成共享依赖项安装和更新到最新版本要求感到困惑。Yarn Workspaces 能否自行满足要求,或者 Lerna 是否需要此功能?在勒纳如何实现这一目标?我是否需要定义一个全局的 package.json“单一事实来源”,或者这些工具是否在幕后自行执行某些版本?Lerna 或 Yarn Workspaces 如何“知道”如何在没有全局版本范围集的情况下将所有单独的 package.json 文件更新到最新版本?(我希望所有项目都相同)

npm lerna yarnpkg yarn-workspaces

9
推荐指数
1
解决办法
6508
查看次数

在 Nestjs api 中编译另一个工作区项目的代码 - 意外的标记“导出”

我正在尝试创建一个包含 NestJs API、React 应用程序以及它们之间共享的许多其他较小项目的 monorepo

\n

monorepo 设置了纱线工作区

\n

使用 Vite 的 React 应用程序可以完美地导入和编译常见项目,但 NestJs api 永远不会编译,通常会给出错误SyntaxError: Unexpected token \'export\'

\n

我制作了一个最小的存储库,其中仅包含一个基本的 Nest 项目和一个公共文件夹,以尝试使用以下结构进行单个函数导入:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common                  # Sample common project\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tsconfig         \n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src        \n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.ts         # The file called from the api\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json   \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 api                     # NestJs API\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tsconfig      \n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src        \n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json             \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json            # Yarn workspace setup\n
Run Code Online (Sandbox Code Playgroud)\n

主要的package.json:

\n
{\n    "name": "mono",\n    "workspaces": [\n …
Run Code Online (Sandbox Code Playgroud)

workspace typescript monorepo nestjs yarn-workspaces

9
推荐指数
1
解决办法
1585
查看次数