Javascript 网页包导入的模块默认值(…)不是函数

Javascript 网页包导入的模块默认值(…)不是函数,javascript,typescript,webpack,Javascript,Typescript,Webpack,上下文:我正在使用TypeScript和Webpack构建一个小型库(在这里我们称之为myLibrary)。我构建了它,并将其导入到react应用程序中,但react应用程序崩溃了 库端 我的主入口点(index.ts)有一个默认导出: import wrapper from "./wrapper"; export default wrapper; 我的包装文件公开了一个默认导出,它是一个函数(wrapper.ts): 该库很容易通过所有单元测试 反应应用程序端 在Rea

上下文:我正在使用TypeScript和Webpack构建一个小型库(在这里我们称之为myLibrary)。我构建了它,并将其导入到react应用程序中,但react应用程序崩溃了

库端

我的主入口点(index.ts)有一个默认导出:

import wrapper from "./wrapper";

export default wrapper;
我的包装文件公开了一个默认导出,它是一个函数(wrapper.ts):

该库很容易通过所有单元测试

反应应用程序端

在React应用程序中生成库和导入库后,我没有Typescript错误,但我的React应用程序崩溃,并显示以下消息:

TypeError: myLibrary__WEBPACK_IMPORTED_MODULE_13___default(...) is not a function
这样打电话给我的图书馆之后:

import createAPI from "myLibrary";
const api = createAPI(); // Crash here even though I should have a nice object containing my functions
这真的很奇怪,因为TS在没有任何警告的情况下很好地编译成JS

我的库wepback config(4.43.0),我使用命令
webpack--config webpack.config.js构建它:

const path = require('path');

module.exports = {
  mode: "production",
  entry: "./src/index.ts",
  output: {
    filename: "index.js",
    path: path.resolve(__dirname, 'dist'),
  },
  resolve: {
    extensions: [".ts", ".js"]
  },
  module: {
    rules: [
      { test: /\.tsx?$/, loader: "ts-loader" }
    ]
  }
}
我的库TS配置(3.7.3):

任何帮助都将不胜感激:)

编辑: 将默认导出更新为命名导出后:

import { createAPI } from "myLibrary";
const api = createAPI();
我又犯了一个错误

TypeError: Object(...) is not a function

当我尝试
console.log(typeof createAPI)时我得到了一个未定义的,这应该是不可能的,因为我的测试正在通过,TS没有抱怨。

在库的网页配置中指出库名称及其模块类型:

输出:{
路径:'./dist',
文件名:“index.js”,
库:“scorm包装器”,
图书馆目标:“umd”
},

如果您将webpack更新为5.x.x版,则问题可能与

因此,如果您在网页包输出中有库设置,请尝试将其删除:

output: {
  path: path.resolve(__dirname, 'build'),
  filename: 'painterro.commonjs2.js',
  library: 'Painterro',  // ⏪ this is the issue
  libraryTarget: 'commonjs2',
 },

请阅读本期

中的更多内容,您的
myLibrary是什么?它是否也导出默认函数?
myLibrary
是我用webpack:)构建的库,而不是默认导出,如果使用命名导出,会发生什么情况?IMO默认的导出无论如何都很糟糕。看,我很不确定你的上下文是否正确。您的意思是说您构建了一个简单的库,将包装器导出为默认值,然后在另一个项目中使用它?这个问题正在当前的项目中发生。对吗?上面的webpack.config和tsconfig属于哪个项目?我刚刚更新了我的问题:)谢谢,它与命名导出一起工作,我对此很满意:)我尝试了相同的解决方案,但不适用于我…获取类型错误:对象(…)不是函数
TypeError: Object(...) is not a function
output: {
  path: path.resolve(__dirname, 'build'),
  filename: 'painterro.commonjs2.js',
  library: 'Painterro',  // ⏪ this is the issue
  libraryTarget: 'commonjs2',
 },