【问题标题】:Yarn Workspaces, workspace does not emit errors or warningsYarn Workspaces,工作区不会发出错误或警告
【发布时间】:2020-12-25 11:46:35
【问题描述】:

我遵循以下post 以使用纱线工作区和craco 创建一个monorepo。 它工作得非常好,除了一件事:公共(组件)库的错误/警告不会发送到控制台。 结构很简单:

monorepo
|-packages
  |-components
  |-fe

Fe 是使用组件库的主要 webApp。 FE 正确发出所有警告,但组件没有。

如何让共享组件发出警告/错误?

更新:

在此 repo 中重现的步骤: https://github.com/sofoklisM/my-monorepo.git

【问题讨论】:

  • 你能具体分享发生了什么吗?还分享一个可重现的回购?
  • 回购添加。该帖子的链接还包含所有详细信息。 shared 库“组件”在编译后不会发出任何警告/错误。例如,如果在 Button.js 中引入了警告或错误,我将在 gitbash 控制台中看到它正在编译,然后我将收到消息“编译成功”。没有警告,没有错误。
  • 您在运行时发现组件发生错误是什么情况?
  • 请在 repo 中查看以下未使用的导入:packages/components/src/Button.js : (useEffect, useCallback)。或者尝试使用未声明的变量。再次没有错误,在 FE 中尝试相同的操作,发出警告/错误。
  • 啊,我明白了。我认为那样做是行不通的。为什么不为从根仓库扩展的每个包设置一个 eslint,然后在运行 start 之前运行它。

标签: javascript reactjs yarnpkg yarn-workspaces


【解决方案1】:

您需要更改的是 Create React App 使用的 underlying ESLint Webpack plugincontext option。 在这种情况下,我将 ESLint 的上下文更改为 monorepo 的根(纱线工作区根)。

这是一个更新的craco.config.js,应该可以解决问题:

// craco.config.js
const path = require("path");
const { getLoader, loaderByName } = require("@craco/craco");
const { getPlugin, pluginByName } = require("@craco/craco/lib/webpack-plugins")
const absolutePath = path.join(__dirname, "../components");
module.exports = {
  webpack: {
    alias: {},
    plugins: [],
    configure: (webpackConfig, { env, paths }) => {
      const { isFound, match } = getLoader(
        webpackConfig,
        loaderByName("babel-loader")
      );
      if (isFound) {
        const include = Array.isArray(match.loader.include)
          ? match.loader.include
          : [match.loader.include];
        match.loader.include = include.concat([absolutePath]);
      }

      // Change context of ESLint Webpack Plugin
      const { match: eslintPlugin } = getPlugin(webpackConfig, pluginByName("ESLintWebpackPlugin"));
      eslintPlugin.options['context'] = path.join(__dirname, "../..");

      return webpackConfig;
    }
  }
};

我还在此处对您的复制存储库进行了更新的分支:https://github.com/ofhouse/stackoverflow-65447779

【讨论】:

  • 由于某种原因,如果我使用错误边界,我会收到一个错误:无法加载配置“./node_modules/kcd-scripts/eslint.js”来扩展。引用自:...my-monorepo\node_modules\react-error-boundary\package.json,整个 App 都在 ErrorBoundary 内,当我删除它时它工作。
  • 好吧,这听起来像是 eslint 出于某种原因试图对 node_modules/react-error-boundary 包中的代码进行 lint。我知道这里发生了什么,今天晚些时候会尝试重现该错误。
  • 好吧,代码中有错字,而不是path.join(__dirname, "../../"),我们不得不使用path.join(__dirname, "../..")(没有尾随/)。现在应该可以工作了,我也更新了答案和分叉。
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2011-02-01
  • 2013-08-26
  • 1970-01-01
  • 2013-07-14
  • 2019-09-08
相关资源
最近更新 更多