【问题标题】:ReactJS + Webpack: Why Uncaught Error: Cannot find module "../media/interiorTest.jpg"?ReactJS + Webpack:为什么未捕获错误:找不到模块“../media/interiorTest.jpg”?
【发布时间】:2017-01-18 00:52:32
【问题描述】:

我有一个使用 ReactJS 运行的 Webpack,我正在尝试抓取图像并显示它,但出现错误:Uncaught Error: Cannot find module "../media/interiorTest.jpg"

这是我尝试过的:

  <div>
    <img src={require("../media/interiorTest.jpg")}/>
  </div>

目录树是(我正在尝试从home-page.js 获取interiorTest.jpg):

而我的webpack.config.js 是:

const webpack = require('webpack');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const config = {
  context: __dirname,
  entry: './src/index.js',
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {
        exclude: /node_modules/,
        test: /\.(js|jsx)$/,
        loader: 'babel'
      },
      {
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract('css!sass')
      }
    ]
  },
  devServer: {
    historyApiFallback: true,
    contentBase: './'
  },
  plugins: [
    new webpack.DefinePlugin({ 'process.env':{ 'NODE_ENV': JSON.stringify('production') } }),
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin(),
    new webpack.optimize.UglifyJsPlugin({
      compress: { warnings: false },
      output: {comments: false },
      mangle: false,
      sourcemap: false,
      minimize: true,
      mangle: { except: ['$super', '$', 'exports', 'require', '$q', '$ocLazyLoad'] }
    }),
    new ExtractTextPlugin('src/public/stylesheets/app.css', {
      allChunks: true
    })
  ]
};

module.exports = config;

【问题讨论】:

  • ../ 会带你进入components 文件夹.. 所以让它../../public/media。或者如果公众真的很公开,你应该使用普通的旧src="/media/interiorTest.jpg"
  • @Hardy 尝试了第一个但得到了错误:Uncaught Error: Cannot find module "../../public/media/interiorTest.jpg",当我尝试没有 src={require()} 而只是 src="" 的第二个建议时,我得到了GET http://localhost:8080/media/interiorTest.jpg 404 (Not Found)
  • @Hardy 如果您看到我的最后一条评论,请告诉我
  • 您是否忘记粘贴与 jpg 匹配的加载程序定义?
  • @JuhoVepsäläinen 不,webpack.config.js 正是我使用的方式。抱歉,您所说的粘贴与 jog 匹配的加载程序定义是什么意思?

标签: javascript html reactjs webpack react-jsx


【解决方案1】:

通过查看webpack.config.js 中的代码和您包含的屏幕截图,您的目录结构看起来像

app/
    src/
         actions/
         components/
         ...
         public/

webpack.config.js 你有这个代码

  devServer: {
    historyApiFallback: true,
    contentBase: './'
  },

contentBase 属性定义了服务器运行时加载文件的目录,并且由于您将其设置为'./',这意味着文件/数据将从@加载987654327@目录。

这就是从public 目录链接文件的原因,您还必须在路径中包含/src/public,例如src="/src/public/folder/where/image/is-located/image.jpg"

在这种情况下

  <div>
    <img src="/src/public/media/interiorTest.jpg" alt="" />
  </div>

注意

  • 通常代码分为两个文件夹,src 用于存储您正在处理的代码,public 用于 webpack 存储已编译的代码和静态资源。我们只是将/public 设置为contentBase

    值得您花时间研究一下 react 和 javascript 应用程序的目录结构

  • 图片最好有alt="",只需输入最能描述图片的替代文字即可。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-05-02
  • 2019-01-15
  • 2021-11-24
  • 2015-11-22
  • 2018-12-01
  • 1970-01-01
  • 2022-10-25
  • 2022-08-13
相关资源
最近更新 更多