首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在导入到模块时找不到Webpack 5图像

在导入到模块时找不到Webpack 5图像
EN

Stack Overflow用户
提问于 2021-03-19 14:22:02
回答 1查看 1.7K关注 0票数 2

我有一个非常简单的Webpack 5配置,我正在尝试导入图像,以便在我的反应应用程序。我可以导入图像并使用它,而不需要Webpack抱怨:

代码语言:javascript
复制
import SomeImage from 'assets/some-image-jpg'
...
<img src={SomeImage} />

但是,在浏览器中找不到图像。我使用webpack-清单插件和devServer选项writeToDisk通过Django为资产服务。JS和CSS按预期工作。

代码语言:javascript
复制
const path = require('path');
const { WebpackManifestPlugin } = require('webpack-manifest-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  entry: './front/index.js',
  output: {
    filename: 'index-bundle.js',
    path: path.resolve(__dirname, './local-static'),
    publicPath: '/',
    assetModuleFilename: 'img/[hash][ext][query]',
  },
  devServer: {
    writeToDisk: true,
    disableHostCheck: true,
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        loader: "babel-loader",
      },
      {
        test: /\.(scss|css)$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
      },
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/i,
        type: 'asset/resource',
      },
    ]
  },
  resolve: {
    modules: [
      path.join(__dirname, "front"),
      "node_modules"
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({ filename: 'css/[name].css' }),
    new WebpackManifestPlugin({ publicPath: './' }),
  ],
};

编辑:示例输出的mainfest.json文件:

代码语言:javascript
复制
{
  "main.css": "./css/main.css",
  "main.js": "./index-bundle.js",
  "main.jpg": "./img/fbf8476a272a27c10e80.jpg",
  "front/assets/no-image.jpg": "./img/fbf8476a272a27c10e80.jpg"
}

“前台”是存储源文件的文件夹的名称。

编辑2:输出文件夹的内容:

代码语言:javascript
复制
├── css
│   └── main.css
├── img
│   └── fbf8476a272a27c10e80.jpg
├── index-bundle.js
└── manifest.json
EN

回答 1

Stack Overflow用户

发布于 2021-06-28 04:25:09

您的图像似乎存在,但它已被重命名为带有哈希键前缀。这是为了在文件名不变但图像有变化时绕过图像缓存问题。通常,插件足够聪明,可以修复大部分插件,但并不是所有对重命名的引用。

要检查映像文件是否实际被写入磁盘,可以临时更改assetModuleFilename键以使用原始名称和文件扩展名,如下面一节所示。如果您的图像文件不太可能更改,则可能会使此更改永久化。您现在应该可以在浏览器中看到该文件了!

否则,可以手动替换配置文件或其他文件中引用的图像的新哈希名称。插件可以自动生成所有散列项的映射文件manifest.json。

示例:

代码语言:javascript
复制
  output: {
    publicPath:"", // default is "auto"
    path: path.join(__dirname, "build"),
    filename: "[name].bundle.js",
    clean: true,
    assetModuleFilename: '[name][ext]'
  },

警告!不要放置句号(.)在assetModuleFilename键中的替换之间,就像在文件名键中所做的那样,否则您可能会得到一个未找到的文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66709929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档