如何解决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]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。