Webpack 文件加载器输出 [对象模块]

2023-12-06

我正在使用 webpackHtmlWebpackPlugin, html-loader and file-loader。我有一个简单的项目结构,其中不使用任何框架,而仅使用打字稿。因此,我直接将 HTML 代码写入index.html。我还使用这个 HTML 文件作为我的模板HtmlWebpackPlugin.

与所有网站一样,我需要将引用 PNG 的图像放入我的资源文件夹中。file-loader应该正确加载文件,将新文件名放入src标签,但事实并非如此。相反,作为src标签,我有[object Module]。我假设file-loader发出一些对象,当它的时候它是这样表示的.toString()方法运行。但是,我可以看到file-loader已成功处理文件并以新名称发送到输出路径。我没有收到任何错误。这是我的 webpack 配置index.html.

const projectRoot = path.resolve(__dirname, '..');

{
  entry: path.resolve(projectRoot, 'src', 'app.ts'),
  mode: 'production',
  output: {
    path: path.resolve(projectRoot, 'dist'),
    filename: 'app.bundle.js'
  },
  resolve: {
    extensions: ['.ts', '.js']
  },
  module: {
    rules: [
      {
        test: /\.html$/i,
        use: 'html-loader'
      },
      {
        test: /\.(eot|ttf|woff|woff2|svg|png)$/i,
        use: 'file-loader'
      },
      {
        test: /\.scss$/i,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              hmr: false
            }
          },
          {
            loader: 'css-loader',
            options: {
              sourceMap: false
            }
          },
          {
            loader: 'sass-loader',
            options: {
              sourceMap: false
            }
          }
        ]
      },
      {
        exclude: /node_modules/,
        test: /\.ts$/,
        use: 'ts-loader'
      }
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      template: path.resolve(projectRoot, 'src', 'index.html')
    }),
    new MiniCssExtractPlugin({
      filename: '[name].[hash].css',
      chunkFilename: '[id].[hash].css',
      ignoreOrder: false
    })
  ]
};

索引.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
  </head>
  <body class="dark">
    <header>
      <nav class="navigation">
        <div class="left">
          <img src="assets/logo.png" class="logo"> <!-- This logo is output as [object Module] -->
        </div>
        <div class="right">

        </div>
      </nav>
    </header>
  </body>
</html>

项目结构:

config/
    webpack.config.js
dist/
src/
    styles/
    assets/
        logo.png
    index.html
    app.ts

Edit我的 package.json 依赖项:

"clean-webpack-plugin": "^3.0.0",
"css-loader": "^3.2.0",
"file-loader": "^5.0.2",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.8.0",
"node-sass": "^4.13.0",
"sass-loader": "^8.0.0",
"style-loader": "^1.0.0",
"ts-loader": "^6.2.1",
"typescript": "^3.7.2",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.10",
"webpack-dev-server": "^3.9.0"

根据文件加载器docs:

默认情况下,file-loader 生成使用 ES 模块语法的 JS 模块。在某些情况下,使用 ES 模块是有益的,例如模块串联和树摇动的情况。

看来webpack解析了ES模块require()调用如下所示的对象:{default: module},而不是扁平化模块本身。这种行为有些争议,在这个问题.

因此,为了获得您的src属性要正确解析,您需要能够访问default导出模块的属性。如果您使用框架,您应该能够执行以下操作:

<img src={require('assets/logo.png').default}/> <!-- React -->
<!-- OR -->
<img src="require('assets/logo.png').default"/> <!-- Vue -->

或者,您可以启用 file-loader 的 CommonJS 模块语法,webpack 将直接解析为模块本身。放esModule:false在你的 webpack 配置中。

webpack.config.js:

 {
        test: /\.(png|jpe?g|gif)$/i,
        use: [
          {
            loader: 'file-loader',
            options: {
              esModule: false,
            },
          },
        ],
      },
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 文件加载器输出 [对象模块] 的相关文章

随机推荐

  • 将 url 参数传递给 swf (flash) 影片

    这里是Flash新手 我正在尝试在浏览器中加载 swf 文件并将 url 参数传递给 flash 影片 如何在actionscript中访问flash电影中的url参数 这是一个示例网址 我确实找到了通过嵌入 对象标签传递参数的指针 但没有
  • MockMvc WebAppConfiguration:在 web.xml 中加载 servlet 映射

    我正在使用 MockMvc 编写集成测试 我想知道是否有一种方法可以从 web xml 加载 servlet 映射 这通常不重要 我有一个习惯HandlerInteceptor与请求 URI 匹配 来自HttpServletRequest
  • Trac,如何分层组织页面?

    I use trac管理我的项目 我想以与 trac 项目相同的方式组织 wiki 页面 即按类别 子类别等 标题索引trac 网站上的页面很好地解释了我想要获得的结果 我该如何实现这一目标 首先 你可以创建分层的wiki页面 只需修改ur
  • 有没有办法改变 UIToolbar 的高度?

    我有一个UIToolbar在 Interface Builder 中 我注意到它的高度被锁定为 44px 当然 我想把它做得更大 Apple 允许调整此控件的大小吗 如果是这样 我该怎么办 当然 只需将其框架设置不同即可 myToolbar
  • python 日志记录 - 使用 JSON 日志,我可以为每个日志添加“额外”值吗?

    我正在使用蟒蛇logging模块 以及python json logger我想添加一些键 app name myapp env prod 自动查看我的所有日 志 无需执行以下操作 logger info Something happened
  • 为什么当我设置元素位置:绝对时线性渐变消失?

    我制作了一个渐变背景 我想将这个文本块居中 我的目标是创建一个位于屏幕中间中心的标题 无论视口的分辨率如何 所以我把这个 header 设置为绝对位置 并使用了我在网上找到的这种集中方法 它完美地集中 问题是 渐变背景变成白色 看起来标题位
  • 查找开放会话数

    我正在寻找一种简单 无数据库 的方法来列出网站上有多少活跃用户 我能想到的最简单的方法是计算打开会话的数量 这段代码应该管用 number of users count scandir ini get session save path 当
  • std regex_search 仅匹配当前行

    我使用各种正则表达式逐行解析 C 源文件 首先我读取字符串中文件的所有内容 ifstream file stream commented cpp ifstream binary std string txt std istreambuf i
  • 如何将参数注入 TestCafé 测试?

    设想 我使用 API 运行用代码封装的 TestCaf 我有一个想要参数化的测试 使用不同的动态值进行测试 Problem Testcaf 不支持向测试发送参数 有没有办法注入值 您可以使用进程 env将参数从运行程序脚本传递给 TestC
  • 如何从 Guava MultiMap 中获取每个条目及其关联的相应值?

    我正在读取一个巨大的 csv 文件 其中包含重复的条目 我能够将整个 csv 文件读入Multimap 我还能够获取具有重复值的键集并将它们写入文件 我想获取与每个键关联的值并将其写入文件 但无法这样做 我似乎找不到任何可能对我有帮助的选项
  • 如何在 Rails 4 中将 PDF 转换为 Excel 或 CSV

    我已经搜索了很多 除非在这里问这个问题 否则我别无选择 你们知道有一个在线转换器有 API 或 Gem s 可以将 PDF 转换为 Excel 或 CSV 文件吗 我也不确定这里是否是问这个问题的最佳地点 我的应用程序是在 Rails 4
  • 有没有办法使用命令行 cURL 跟踪重定向?

    我知道在 php 脚本中 curl setopt ch CURLOPT FOLLOWLOCATION true 将遵循重定向 有没有办法使用命令行 cURL 跟踪重定向 使用位置标头标志 curl L
  • 为什么 re.sub('.*?', '-', 'abc') 返回 '-a-b-c-' 而不是 '--------'?

    这是python2 7的结果 gt gt gt re sub abc a b c 我以为的结果should如下 gt gt gt re sub abc 但事实并非如此 为什么 据我所知 对这种行为的最好解释来自regexPyPI 包 其目的
  • JSON.Stringify 在 Scripting.Dictionary 对象上失败

    我正在开发一个 ASP 经典项目 在该项目中我实现了 JScript JSON 类here 它能够与 VBScript 和 JScript 互操作 并且几乎与以下位置提供的代码完全相同 json org 我的团队经理要求我在这个项目中使用
  • 如何交错两个数组列表?

    我正在尝试开发一个程序 通过将一副牌分成两部分然后将它们交错来洗牌 班级甲板代表一副 52 张牌 有两种方法 牌组 int n and 抽卡卡 牌组 int n 是构造函数 该参数告诉我们应该洗牌多少轮 在每轮洗牌中 整副牌首先被分成两个子
  • 用于 dotnet 的 Google API v3;使用带有 API 密钥的日历

    我正在尝试使用 v3 API http code google com p google api dotnet client 读取我自己的 Google 日历 我最终想要的是通过自定义控件在我的网站上显示来自 Google 日历的我自己的日
  • 是否可以删除 .NET 中未使用的代码/程序集?

    我的应用程序中有一个控件库 对于我正在开发的应用程序类型来说有点大 该库超过 2Mb 我几乎不使用它的功能 我想说我使用了它所有功能的 5 到 10 有没有办法从库中删除我的应用程序从不使用的代码 P S 该库不是我开发的 也不是开源的 不
  • 如何在Linux中创建给定大小的文件?

    出于测试目的 我必须生成一定大小的文件 以测试上传限制 在 Linux 上创建特定大小的文件的命令是什么 对于小文件 dd if dev zero of upload test bs file size count 1 Where file
  • Kotlin 中 KProperty1 的通用扩展

    我有以下代码 import kotlin reflect KProperty1 infix fun
  • Webpack 文件加载器输出 [对象模块]

    我正在使用 webpackHtmlWebpackPlugin html loader and file loader 我有一个简单的项目结构 其中不使用任何框架 而仅使用打字稿 因此 我直接将 HTML 代码写入index html 我还使