Lerna monorepo NestJS和Create React App:在开发人员模式下可以找到作品,但是构建失败

问题描述

我用两个程序包创建了一个lerna monorepo:香草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!';
  }
}

以开发人员模式(yarn run start)运行CRA可以正常工作。我可以创建很多猫并调用它们的方法。因此,基本上,monorepo设置有效。但是,如果我在CRA中运行yarn run build,则会收到此错误: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中使用纱线启动时,它们都可以正常工作,但在创建生产版本时,它们都将失败。

我的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;
    },},};

解决方法

concat语法似乎有错误。试试:

match.loader.include = include.concat([absolutePath]);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...