当前位置: 首页 > 面试题库 >

TypeError:__webpack_require __。i(…)不是一个函数

顾正初
2023-03-14
问题内容

我在尝试简化导入时遇到webpack
TypeError。以下代码可以正常工作。在这里,我导入了一个smartForm从调用的React高阶组件(HOC)core/components/form/index.js

core / components / form / index.js (对进行命名输出smartForm

export smartForm from './smart-form';

login-form.jsx (导入和使用smartForm

import { smartForm } from 'core/components/form';
class LoginForm extends React.Component {
    ...
}
export default smartForm(LoginForm);

但是,我想将导入简化为just import { smartForm } from 'core'。所以,我再出口smart- formcore/index.js和进口它core。请参见下面的代码:

core / index.js (对进行命名导出smartForm

export { smartForm } from './components/form';
// export smartForm from './components/form';  <--- Also tried this

login-form.jsx (导入和使用smartForm

    import { smartForm } from 'core';
    class LoginForm extends React.Component {
        ...
    }
    export default smartForm(LoginForm); // <--- Runtime exception here 

这段代码编译没有任何问题,但是我在行中得到了以下运行时异常export default smartForm(LoginForm);

login-form.jsx:83未捕获的TypeError: webpack_require .i(…)不是函数(…)

我想念什么?

PS这是我正在使用的圣经和插件版本:

"babel-core": "^6.18.2",
"babel-preset-es2015-webpack": "^6.4.3",
"babel-preset-react": "^6.16.0",
"babel-preset-stage-1": "^6.16.0",

问题答案:

tl; dr

  • 对于发问者:将其添加到您的webpack.config.js
        resolve: {
      alias: {
        core: path.join(__dirname, 'core'),
      },
    },
  • 对于一般读者:确保您尝试导入的东西确实存在于该软件包中。

说明

发问者的问题:导入自己的代码,例如npm模块

您尝试以与从node_modules文件夹中的npm包中导入内容相同的方式导入模块的导出内容:import { something } from 'packagename';。这样做的问题是无法立即使用。在Node.js的文档给出为什么答案:

如果没有以“ /”、“./”或“ ../”开头的文件,则该模块必须是核心模块,或者是从node_modules文件夹加载的。

因此,您必须按照Waldo Jeffers 建议进行操作并编写import { smartForm } from './core',或者可以配置webpack以便它可以通过创建别名来解决导入路径,而别名是为解决此确切问题而创建的。

一般调试错误消息

如果您尝试从现有的npm包(中node_modules)中导入某些内容,但是 导入的内容在导出中不存在, 则会出现此错误。在这种情况下,请
确保没有拼写错误, 并且您尝试导入的给定内容确实在该软件包中。如今,将库分成多个npm软件包很流行, 您可能正在尝试从错误的软件包中导入

因此,如果您得到这样的信息:

TypeError: __webpack_require__.i(...) is not a function  
   at /home/user/code/test/index.js:165080:81  
   at Layer.handle [as handle_request] (/home/user/code/test/index.js:49645:5)

要获取有关应检查哪些导入的更多信息,只需打开由webpack生成的输出文件,然后转到错误堆栈中最上面一行所标记的行(本例中为165080)。您应该看到类似:的信息__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_9_react_router_dom__["match"])。这告诉我们,中没有match导出(或存在,但是它不是一个函数)react-router-dom,因此我们需要检查该导入周围的内容。



 类似资料:
  • 我有这个功能: 不知什么原因,我得到以下错误: 我看了这篇文章:https://stackoverflow.com/questions/44176021/nodejs-res-send-is-not-a-function 它看起来像另一只虫子。 我怎样才能修好它?

  • 我试着按照教程angular.io(游览英雄)但不是教程,我试着在一些JSON上提出真正的GET请求。 我的代码如下所示: 为了服务,我只进口一些基本的东西: 其中是TOH中的基本副本,所以: 如何在服务中调用此特定方法:首先,我尝试多种方法,但在调试时,我只尝试控制台。将其记录为: 在控制台中加载页面时,我发现多个错误:第一个错误是: 例外:TypeError:这是一个错误。http。得到(…)

  • 我正在尝试使用APP_初始值设定项从配置文件加载数据。我发现以下错误: “未处理的promise拒绝:this.appInits[i]不是函数;区域:;任务:Promise.then;值:TypeError:this.appInits[i]不是函数” 代码: 我做错了什么有什么帮助吗? 编辑: 亚当的解决方案修正了最初的错误。但现在我看到了一个新的错误: TypeError:无法设置未定义的属性“

  • 我正在重构我的索引文件,该文件在Sequelize中创建我的所有模型,以使用导入,而不是切换到节点v14和Sequelize v6和模块的require。但我被这个奇怪的错误困住了: 下面是发生这种情况的代码块: 错误表明它发生在这一行:

  • 问题内容: 我正在尝试创建一个简单的AJAX请求,该请求从MySQL数据库返回一些数据。这是我的以下功能: …在这里我称之为解析所需的参数: 但是,我的成功回调未运行(因为“成功!”未记录到控制台),并且在控制台中出现错误: 这是什么意思?在成功事件触发$ .ajax内部的匿名函数之前,我已经完成了AJAX请求,但是现在我试图运行一个单独的命名函数(在本例中为回调)。我该怎么办? 问题答案: 这里

  • 我正在创建一个简单的AJAX请求,它从数据库返回一些数据。下面是我的函数: 这就是我称之为它的地方,提供了所需的参数: 但是,回调没有运行,相反,我在控制台中得到一个错误: 为什么?我以前做过AJAX请求,成功事件会触发$.AJAX中的匿名函数,但现在我尝试运行一个单独命名的函数。我该怎么办?