问题标签 [monorepo]

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 回答
5067 浏览

node.js - 如何将 lerna 与 dotenv 包一起使用?

我有一个使用 Lerna 管理的 monorepo。我需要使用多个环境变量来启动我的 Web 服务器。我启动服务器的 npm 脚本是:

我也在尝试使用dotenv包来加载.env文件的环境变量。因为,dotenv纯粹是设置env vars的开发助手,所以我将它安装为devDependencytop package.jsondotenv利用 node.js 预加载脚本,如:node -r dotenv/config server_script.js.

但是使用 Lerna,我不能再调用预加载脚本。有什么方法可以使用dotenvwithlerna吗?或者,如何使用 lerna 运行预加载脚本?

0 投票
2 回答
1070 浏览

vue.js - Webpack 无法解决 node_modules 惰性资产

我正在开发一个 vuejs 项目,我们正在尝试将外部 vue cli 应用程序用作库。在这些库中,我们希望能够导出一个路由器配置,该配置会延迟加载这些模块之一中的组件。但是,当我们使用 vue-cli-service 将其编译到库中并且它有惰性块资产时,我们无法使用 webpack 解析它们。

我感觉它与公共路径或一些简单的配置有关,但在这个阶段我只是被卡住并用它撞到墙上。

https://github.com/EvanBurbidge/mono-repo-tester

这是我们正在做的事情的简单概述

app1 的控制台输出 see_screenshot_1 app2 的路由器配置 see_screenshot_2 路由器从 app1 导入 app2 see_screenshot_3

/* config.module.rule('js') */ { test: /\.jsx?$/, exclude: [ function () { /* omitted long function */ } ], use: [ /* config.module.rule('js').use('cache-loader') */ { loader: 'cache-loader', options: { cacheDirectory: '/Users/evan/test/node_modules/.cache/babel-loader', cacheIdentifier: '39e7e586' } }, /* config.module.rule('js').use('babel-loader') */ { loader: 'babel-loader' } ] },

0 投票
3 回答
2292 浏览

git - 对 monorepo 中目录的精细访问

我一直在阅读有关 monorepos 的优点,但还没有找到解决共享部分 repo问题的缓解方法:

假设一个组织有一个用于客户端/服务器 Web 应用程序的 monorepo。他们聘请承包商来设计客户的某些部分。他们如何才能让承包商只访问相关的客户代码?即使是稀疏的结帐也不是微不足道的。

0 投票
1 回答
2703 浏览

typescript - VSCode - Lerna - Typescript - Monorepo 代码导航

我们在 Sentry 为我们所有的 Javascript 相关 SDK 提供了一个 monorepo。 https://github.com/getsentry/sentry-javascript

如果您克隆此 repo,请正确设置它 yarn install ,然后打开任何文件,packages/node/src/backend.ts并尝试跳转到另一个包的实现,例如包中的limitObjectDepthToSize函数utils

首先,如果您之前没有构建项目(所有类型定义都已到位),则会弹出此错误:

在此处输入图像描述

但是即使你之前构建CMD+Click了所有东西,现在函数上总是跳转到构建object.d.ts而不是我真正想要的是它跳转到可以找到的实现源文件而 packages/utils/src/object.ts不是/packages/utils/object.d.ts.

在此处输入图像描述

我现在的问题是,我们的设置是否错误,VSCode 中是否有任何选项或者可以tsconfig.json修复此代码导航?

或者这是目前已知的 VSCode 在 monorepo 环境中的限制?

感谢您提供任何帮助,我希望我刚刚错过的并不是很明显,谢谢!

0 投票
1 回答
989 浏览

reactjs - 无法在 monorepo 中配置 mobx(使用 yarn 工作区)

我正在尝试使用纱线工作区设置一个带有反应和反应本机应用程序的 monorepo。

我的问题是 mobx(和 react-mobx)库。当我在共享包中使用它时,它不起作用。

这是共享库中的简单组件。它应该只呈现一个按钮和数字,并在单击文本时增加数字:

在浏览器(反应)应用程序中,我收到以下错误:

在本机应用程序(react-native)中,我收到以下运行时错误:

我认为问题在于包和链接它们。我尝试了几件事来解决这个问题,但都没有奏效:

  • 添加mobxmobx-react进入workspaces.nohoist
  • 将共享库的所有依赖项移动到peerDependencies
  • 确保使用mobx@4.x它与 react-native 兼容

这是根 package.json:

这是共享包的 package.json:

这是 webapp 的 package.json:

这是 react-native 应用程序的 package.json:

迄今为止,我正在使用最新的纱线版本:1.13.0

我创建了一个 repo,可以复制我在这里遇到的问题。

如果有人能够帮助我让它工作,我将非常感激!

0 投票
0 回答
3638 浏览

node.js - 将所有 node_modules 路径传递给 AWS CodeBuild 缓存

目前我正在使用 AWS CodeBuild 来部署我的 monorepo 项目,并且我正在尝试使用它的缓存属性。我想缓存我的node_modules文件夹,我buildspec.yml的是:

有没有办法使用通配符将所有内容添加node_modules到路径?

我的存储库结构是:

谢谢!

更新 1 (05/14/16):

我收到这个错误

当我使用

0 投票
0 回答
141 浏览

javascript - NPM 使用文件更新和过时的本地路径:

运行npm update --depth=9999npm outdated --depth=9999跳过本地路径依赖项。

我认为它们将充当任何其他已发布的软件包。

我们从 monorepo 的根目录运行命令:

此外,npm outdated从子包目录运行时,NPM 不使用 root node_modules

我发现了类似的问题:1 , 2

  • 运行npm i不是解决方案,因为我们正在使用package-lock
  • 我想将依赖项保留在子包中,而不是根目录中package.json

我做错了什么,还是目前不支持它,应该只使用类似npm-check 的东西?

npm-check不能更新子依赖,所以要对整个依赖树进行完整更新,我们需要:

  • rm package-lock
  • rm -rf node_modules
  • npm cache clean
  • 在根和子包中手动更改版本
  • npm i
  • 提交新的package-lock

这是正确的还是有更好的方法来处理这个问题?

0 投票
0 回答
309 浏览

angular - 仅当在 angular monorepo 中更改时才发布 npm

我有一个带有“应用程序”和一个库的 angular monorepo,它作为它自己的 npm 包发布。这是在 CI 环境中自动完成的。到目前为止,库和应用程序是分开的,并且有单独的构建作业。现在它们是一起构建的,我面临的问题是每次构建(对 的每次更改master)都会发布 lib,即使更改可能已经(并且很可能是)在应用程序中。

有没有一种直接的方法来只发布一个 npm 包,如果它的内容自上次发布以来发生了变化?

如果我运行npm info <the-package>有一个.shasum.integrity校验和,我希望我可以在运行时将它们与相同的值进行比较npm publish <directory> --dry-run。不幸的是,这些命令会导致不同的校验和,即使包的内容完全相同。**

** 为了验证这一点,我将发布的 tarball 的内容与新构建的 dist/ 版本的 lib 进行了比较。两个目录上的 Adiff -r显示没有差异。

更新

由于缺乏更好的想法,我在 bash 中编写了一个手动解决方案(因为无论如何我的 lib 的发布都是在 bash 脚本中发生的)。因为在我的情况下,每个版本都被标记,我得到最后一个标记的提交并检查从那时起库中是否有任何变化。这绝不是一个好的解决方案,您可能不应该使用它,但如果它对某人有帮助:

有一些明显的改进我现在不想解决:

  • 该脚本应忽略出于发布以外的其他原因而标记的提交
  • 最后一个版本应该以某种方式存储,否则不能保证您实际上正在检查自上次发布 lib 以来的最后一个版本
  • 忽略某些不需要发布新版本的更改可能是有意义的
0 投票
0 回答
191 浏览

reactjs - 如何在基于 typescript (babel) 的 monorepo 中获取 create-react-app 测试

我以 https://github.com/serhii-havrylenko/monorepo-babel-ts-lerna-starter为例,(lerna、yarn 工作区、typescript 和 babel transpilation based monorepo)并添加了一个 create-react-app基于应用程序的项目。

经过一些调整,我已经在 UI 项目yarn buildyarn start正常工作,(成功地)拉入了其他包中定义的模块。最重要的变化是从 typescript 路径和 baseUrl 配置切换到查找模块,而不是使用工作区链接。

我的问题是我无法yarn test在 UI 项目中工作。当我运行它时,我得到:

此错误位于成功构建并在浏览器中加载的组件中。

我已经尝试了所有我能想到的方法来开玩笑地正确加载这个模块。

我没有在此处粘贴大量文件内容,而是在此处发布了我的分叉存储库:https ://github.com/ggascoigne/monorepo-babel-ts-lerna-starter 。自述文件列出了重现问题的明确步骤。

有人有什么建议吗?

0 投票
0 回答
111 浏览

javascript - 如何使用 react 和 react 本机应用程序进行 Monorepo 设置以在它们之间共享代码

我想与 react web 分享大部分 react-native 登录。我为此使用 react-native-web 包。从共享文件夹中导入文件不会解析为正确的路径。