4

我用两个包创建了一个 lerna monorepo:一个 vanilla NestJS 应用程序和 CRA 生成的应用程序。这里我使用 craco 从 monorepo 导入其他包。

在 NestJS 包中,我有一个简单的类,我想在 react 应用程序中共享/使用它。它包含一个节点导入和一些方法:

import countries from 'i18n-iso-countries';

export class Cat {
  constructor(private readonly name: string) {}

  public get from() {
    return countries.alpha2ToAlpha3('DE');
  }

  public makeSound() {
    return 'Meow!';
  }
}

在开发模式 ( ) 下运行 CRAyarn run start可以正常工作。我可以创建很多猫并调用它们的方法。所以基本上 monorepo 设置是有效的。但是,如果我yarn run build在 CRA 中运行,我会收到此错误:Attempted import error: 'i18n-iso-countries' does not contain a default export (imported as 'countries').

如果我删除 cat 类中的 i18n-iso-countries 导入,它构建得很好。我尝试了几种变体,例如命名导入import {alpha2ToAlpha3} from 'i18n-iso-countries'import * as countries from 'i18n-iso-countries'. 在 CRA 中使用 yarn start 时它们都可以正常工作,但在创建生产版本时会失败。

我的 craco 配置。

const path = require("path");
const { getLoader, loaderByName } = require("@craco/craco");
const absolutePath = path.join(__dirname, "../backend");

http: 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];
      }
      return webpackConfig;
    },
  },
};
4

1 回答 1

0

concat 语法似乎有问题。尝试:

match.loader.include = include.concat([absolutePath]);
于 2020-09-21T19:03:14.383 回答