umi项目中使用html-loader引入html文件报错`this.getOptions is not a function`

2023-11-16

背景

在umi项目中引用html文件,使用html-loader解析html文件(,)

 "dumi": "^1.1.0" 
 "html-loader": "^3.1.0"

环境信息

tiands@tiandsdeMacBook-Pro demo-doc % node -v
v14.18.1
tiands@tiandsdeMacBook-Pro demo-doc % npm -v
6.14.15

问题描述

通过umi配置项chainWebpack添加了html-loader,运行项目的终端报错TypeError: this.getOptions is not a function

umirc.ts配置

import { defineConfig } from 'dumi';

export default defineConfig({
  title: 'demo文档',
  ...
  chainWebpack(config){
    config.module
      .rule('html-loader')
      .test(/\.html$/)
        .exclude
        .end()
      .use('html-loader')
        .loader('html-loader');      
  },
 ...
});

react组件代码

import React from 'react';
import styles from './EchartsMap.less';
import data from './中国地图.html';

export interface EchartsMapProps extends React.HTMLAttributes<HTMLDivElement> {}

const EchartsMap = (props: EchartsMapProps) => {
  const { className = '', ...otherProps } = props;
  return (
    <div className={`${styles.root} ${className}`} {...otherProps}>
  <iframe
        title="resg"
        srcDoc={data}
        style={{ width: '100%', border: '0px', height: '600px' }}
        sandbox="allow-same-origin allow-scripts allow-popups allow-forms"
        scrolling="auto"
      />
    </div>
  );
};

export default EchartsMap;

报错信息

 ERROR  Failed to compile with 1 errors                                                                            下午4:14:24

 error  in ./src/PureHtml/ components/EchartsMap/中国地图.html

Module build failed (from ./node_modules/html-loader/dist/cjs.js):
TypeError: this.getOptions is not a function
    at Object.loader (/Users/tiands/Desktop/github/demo-doc/node_modules/html-loader/dist/index.js:23:27)

 @ ./src/PureHtml/ components/EchartsMap/EchartsMap.tsx 6:0-31 24:12-16
 @ ./src/.umi/dumi/demos/index.ts
 @ ./src/.umi/dumi/layout.tsx

解决流程

  1. 大致看下报错,一个方法没找到,没什么头绪,
  2. 搜索“umi htm-loderl this.getOptions is not a function”,找到一片文章TypeError: this.getOptions is not a function(html-loader),文章说是html-loader版本太高,报错很一致,但是他是vue项目
  3. 搜索“html-loader this.getOptions is not a function”,找到一篇TypeError: this.getOptions is not a function #378 - GitHub的webpack相关文章,里面说html-loader@2.0不支持webpack5

原因分析

umi项目默认使用webpack4(umi-文档)
在这里插入图片描述

html-loader从2.0开始就仅支持webpack5(html-loader/releases)
在这里插入图片描述


解决方案

方案一:降级html-loader

先移除之前的版本

npm uninstall html-loader

安装较稳定版本

npm i html-loader@1.3.0 --save

方案二:使用webpack5编译项目

修改umirc.ts配置项webpack5

import { defineConfig } from 'dumi';

export default defineConfig({
  title: 'demo文档',
  ...
  chainWebpack(config){
    config.module
      .rule('html-loader')
      .test(/\.html$/)
        .exclude
        .end()
      .use('html-loader')
        .loader('html-loader');      
  },
  webpack5:{},
  ...
});

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

umi项目中使用html-loader引入html文件报错`this.getOptions is not a function` 的相关文章

  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • React - 无法读取未定义的属性[重复]

    这个问题在这里已经有答案了 通常 当我单击子组件中的菜单项时 它会调用 this handlesort 这是一个本地函数 处理排序从我的父组件中获取 onReorder 属性 onReorder 调用名为 reOrder 的本地函数 它设置
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • HTML 中部分着色的阿拉伯语单词

    我不会说阿拉伯语 但我需要我们网站上对阿拉伯语的具体支持 我需要将部分阿拉伯语单词放在 span 与单词其他部分的风格不同 当我输入两个字符时 and 它们被组合成word 但是当我使用 HTML 标记时 span span 这些字母在输出
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 避免响应式页面的重复内容

    我目前正在做一个涉及响应式设计的项目 整个布局应该使用HTML和CSS来实现 我知道可以使用 java 脚本将内容从一个列布局移动到另一列布局 而无需复制内容 但是使用 HTML 和 CSS 是否可以实现相同的效果 以下面的例子为例 它会在
  • 我可以使用 jQuery 打开下拉列表吗

    对于 HTML 中的下拉列表
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 为什么元素上的负底部边距会降低该元素父元素的高度?

    这可能是由于边距折叠造成的 我知道边距折叠 至少知道它如何影响相邻元素 但我不明白当涉及负边距时它如何在嵌套元素上工作 例如 在此标记和随附的 CSS 中 Markup div class parent div class child Ch
  • 如何在 AngularJS 循环内使用标签

    所以我在里面ng repeat像这样 li li
  • 无效字符错误:“fred”

    我确信他一定是一个新手问题 简单来说 我想定义我的第一个 Polymer dart 组件 只是我一直在同一个减速带上踢脚趾 为了使事情变得非常简单 我将其简化为一个非常简单的示例 我做了一个简单的rename示例 跑表 来自 Dart 组件

随机推荐