- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个相当标准的 lerna monorepo,它看起来像这样:
packages/
main/ - This is the main deployable application, it depends on both dep and react-dep
dep/ - Just some pure functions, no problems here
react-dep/ - A design system built with react, this is where we have problems.
Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://reactjs.org/warnings/invalid-hook-call-warning.html for tips about how to debug and fix this problem.
react
和任何其他共享/对等依赖项为
externals
在你的 webpack 配置中。
Eg, as suggested here.或查看
this Github issues thread from react .
react-dep
我声明
react
在这两个
devDependencies
和
peerDependencies
.我把它放在
devDependencies
的原因是因为我的依赖库可能使用故事书或类似的东西来开发组件,所以我确实需要在开发中使用react。
react-dep
,我认为这应该可行到 npm 并使用
main
中的 npm 编译代码, 因为只有
dependencies
将被取走。
最佳答案
正如我所见,这个问题可能可以使用 lerna
来解决。 , npm
, yarn
或 webpack
.
我想再推荐一个webpack
那里的解决方案,打开了pr到你的 repo 。如果一个 webpack
解决方案不适合您-请忽略此答案。
比externals
好一点机制,因为它会自动跟踪重叠的对等依赖关系。
module.exports = function(config) {
config.plugins.push(
new NormalModuleReplacementPlugin(re, function(resource) {
// first, remove babel and other loaders paths
const requestWithoutLoaderMeta = resource.request.split('!');
const requestPath = requestWithoutLoaderMeta.length && requestWithoutLoaderMeta[requestWithoutLoaderMeta.length - 1];
if (requestPath) {
// looking for a dependency and package names
const packagesPath = resolve(__dirname, '../') + '/';
const requestPathRel = requestPath.replace(packagesPath, '');
const [packageName, _, depName] = requestPathRel.split('/');
// if the main package has this dependency already - just use it
if (dependencies[packageName]) {
console.log('\x1b[35m%s\x1b[0m', `[REPLACEMENT]: using dependency <${depName}> from package [main] instead of [${packageName}]`);
resource.request = resource.request.replace(`${packageName}/node_modules/${depName}`, `main/node_modules/${depName}`)
}
}
})
);
return config;
}
main
使用
webpack.NormalModuleReplacementPlugin
打包.
I'm happy to hear about alternative technologies (eg. yarn) to solve this problem.
lerna
.
nrwl
项目通常有一个
package.json
仅(使用Google经验),因此您需要为所有软件包安装一次依赖项,并且不会遇到您描述的问题。
关于reactjs - 有没有办法告诉 lerna/npm 到 'really look in my own node_modules for those peer dependencies' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62055604/
要旨 我有一个 monorepo,我正在使用 yarn workspaces和 lerna来管理它。直到现在我都没有问题。我需要知道自上次发布以来所有更改的包。 问题 所以我跑 lerna chang
我正在尝试使用 Lerna 设置我的 monorepo。该计划是通过提取应该是他们自己的包的代码块来重构现有项目。我跑了lerna init ,我当前的设置如下所示: project/ packa
我有一个 Lerna 项目,直到最近才使用 lerna bootstrap --hoist。这很有效,但我发现许多子文件夹中的 devDependencies 大部分是相同的。升级到 Lerna v3
我有三个包: A , 取决于 C B , 取决于 C C 使用 lerna run build 时, C在 A 之前构建和 B (好的!) 但是当我开始监视任务时lerna run watch , C
我们正在迁移我们的 monorepo 以使用 Lerna . Lerna 支持 NPM 和 Yarn,此外还允许使用 Yarn 工作区进行配置。我不清楚带有 Yarn 工作区的 Lerna 是否比带有
我正在迁移到 pnpm 以管理来自 lerna 的 monorepo。但是,在 CI 中,有一个遗留命令使用 lerna 的 --since 选项。 lerna run lint --since or
我在 lerna 包下有 2 个项目。其中一个是一个包,另一个是一个cra网站。当我在每个包下执行“yarn start”时,我可以看到构建文件夹和分别在开发服务器中加载的网站: 包 1 >> "st
在我的 monorepo 中,我有 3 个包 package1 , package2 , package3 ,每个包都包含一个名为 build 的 npm 脚本. 但是,这些包没有链接在一起。即没有r
在现代软件开发中,创建 定制化的命令行工具(CLI) 已成为满足公司业务需求的关键一环。这类工具可以辅助执行诸如代码检查、项目初始化等任务。为了提高开发效率并简化维护过程,我们将功能模块化,并通过多个
我的结构如下: 包.json lerna.json 包 myproj-util 包.json myproj-模式 package.json -- 在 myproj-util 上有开发依赖 这两个项目都
我有一个由 Lerna 驱动的 monorepo,其中包含发布到 NPM 的各种包。其中有各种辅助函数,它们位于 repo 的根目录中,并由几个包共享。 我遇到的问题是,当每个包都是用 Babel 构
对于 yarn workspaces,我有一个常见(或不那么 coomon)的场景并没有在网上找到适合我的指南。 yarn 工作区看起来像这样: - monorepo - packages
我的根目录中有一个 webpack.config.js (在包含 packages*.json 文件的目录之外),当我启动 lerna 时运行 build 然后出现此错误: **ERROR OUTPU
我正在使用 lerna 来管理 React 组件库。我的一些组件既有来自 npm 注册表的外部依赖项,也有内部依赖项,存储库中的同级包。 我正在尝试使用 lerna add 命令将内部依赖项添加到另一
使用 lerna 和本地依赖项的正确方法是什么? 我已经在 mono 存储库中配置了两个模块,以将 lerna 与本地依赖项一起使用。我预料到了 $ lerna bootstrap $ lerna r
我有一个 lerna 存储库,其中包含以通常结构组织的多个包: package.json /packages - alpha package.json - bravo pack
假设两个项目(例如 my-app 和 my-ui)使用 webpack 别名将“components”解析为“./src/components”。我使用 Lerna 在本地“链接”这个项目并简化开发,
当使用 lerna publish 发布包时,如果检测到循环依赖,则会输出警告。 有没有办法让 lerna 检查循环依赖而不发布包? 最佳答案 lerna bootstrap 也会输出循环依赖。 关于
我有一个 lerna 脚本( lerna dev ),它使用 --parallel 启动几个包的开发服务器选项(如果我不使用该选项,则只会启动第一个服务,而不会启动其他服务)。这些服务器在不同端口上以
我正在使用 Lerna monorepo。我经常看到一个包从另一个包的深处导入,例如: import { SomeType } from "@schema/folder/folder/file.ts"
我是一名优秀的程序员,十分优秀!