代码之家  ›  专栏  ›  技术社区  ›  Triyugi Narayan Mani Harendra Kumar

未使用react、webpack和express在浏览器中加载图像

  •  2
  • Triyugi Narayan Mani Harendra Kumar  · 技术社区  · 9 年前

    webpack.config.js

    var path = require('path');
    var webpack = require('webpack');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    const ExtractTextPlugin = require("extract-text-webpack-plugin");
    
    module.exports = {
      devtool: 'eval-source-map',
      entry: [
        'webpack-hot-middleware/client?reload=true',
        path.join(__dirname, 'app/index.js')
      ],
      output: {
        path: path.join(__dirname, '/dist/'),
        filename: '[name].js',
        publicPath: '/'
      },
      plugins: [
        new ExtractTextPlugin('/bundle.css', { allChunks: true }),
        new HtmlWebpackPlugin({
          template: 'app/index.html',
          inject: 'body',
          filename: 'index.html'
        }),
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NoErrorsPlugin(),
        new webpack.DefinePlugin({
          'process.env.NODE_ENV': JSON.stringify('production')
        })
      ],
      resolve: {
        extensions: ['', '.scss', '.css', '.js', '.json'],
        modulesDirectories: [
          'node_modules',
          path.resolve(__dirname, './node_modules')
        ]
      },
      module: {
        loaders: [{
          test: /\.jsx?$/,
          exclude: /node_modules/,
          loader: 'babel',
          query: {
            "presets": ["react", "es2015", "stage-0", "react-hmre"]
          }
        }, {
          test: /\.json?$/,
          loader: 'json'
        }, {
            test: /\.scss$/,
            loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!postcss!sass')
        }, {
            test: /\.css$/,
            loader: 'style-loader!css-loader'
        },{
            test: /\.(png|jpg|jpeg|gif|svg|woff|woff2)$/,
            loader: "url-loader?limit=10000"
        },{
            test: /\.less$/, loader: "style-loader!css-loader!less-loader"
        },{
            test: /\.(ttf|eot|svg|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/, 
            loader: "file-loader"
        }]
      }
    };
    

    server.js

    const path = require("path");  
    const express = require("express");  
    const webpack = require("webpack");  
    const webpackDevMiddleware = require("webpack-dev-middleware");  
    const webpackHotMiddleware = require("webpack-hot-middleware");  
    const config = require("./webpack.config.js");
    
    const app           = express(),  
          DIST_DIR      = path.join(__dirname, "dist"),
          HTML_FILE     = path.join(DIST_DIR, "index.html"),
          isDevelopment = process.env.NODE_ENV !== "production",
          DEFAULT_PORT  = 3000,
          compiler      = webpack(config);
    
    app.set("port", process.env.PORT || DEFAULT_PORT);
    
    if (isDevelopment) {  
        app.use(webpackDevMiddleware(compiler, {
            publicPath: config.output.publicPath
        }));
    
        app.use(webpackHotMiddleware(compiler));
    
        app.get("*", (req, res, next) => {
            compiler.outputFileSystem.readFile(HTML_FILE, (err, result) => {
                if (err) {
                    return next(err);
                }
                res.set('content-type', 'text/html');
                res.send(result);
                res.end();
            });
        });
    }
    
    else {  
        app.use(express.static(DIST_DIR));
    
        app.get("*", (req, res) => res.sendFile(HTML_FILE));
    }
    
    app.listen(app.get("port"));
    

    package.json

    "main": "server.js",
      "script": {
        "start": "babel-node server-es6.js",
        "build:server": "babel server-es6.js --out-file server.js",
        "build:client": "webpack -p --config webpack.config.js --progress"
      },
    

    站点正在加载,但一些css未加载。控制台抛出错误:

    获取 http://bundle.css/ net::ERR\u NAME\u未解析

    http://localhost:3000/img/img1.png 但它没有显示在浏览器中。我认为问题在于网页包公共路径。

    当我使用 <img src={require('/images/image-name.png')} /> ,工作正常。但我不想这样做,因为它的代码库很重,而且我认为这不是一个好的解决方案。

    webpack-express-boilerplate .

    text/html .

    1 回复  |  直到 9 年前
        1
  •  2
  •   Shubham Khatri    9 年前

    如果文件路径是静态的,则可以导入该文件一次,然后将其作为src提供

    import image from '/path/to/images/image-name.png';
    ...
    <img src={image} />
    
    推荐文章