【问题标题】:Loading images results in 404 (Not Found) - webpack加载图像导致 404(未找到) - webpack
【发布时间】:2020-09-20 11:42:59
【问题描述】:

这是错误的文本

我正在尝试在 Phaser 3.23.0 的游戏中加载一些图像 图片在下面文件中的函数 preload() 中加载

main.js

import Phaser from 'phaser';

function preload() {
  this.load.image('sky', 'assets/sky.png');
  this.load.image('ground', 'assets/platform.png');
  this.load.image('star', 'assets/star.png');
  this.load.image('bomb', 'assets/bomb.png');
  this.load.spritesheet('dude',
    'assets/dude.png',
    { frameWidth: 32, frameHeight: 48 });
}

function create() {
  this.add.image(400, 300, 'sky');
}

function update() {
}

const config = {
  type: Phaser.AUTO,
  width: 800,
  height: 600,
  scene: {
    preload,
    create,
    update,
  },
};

// eslint-disable-next-line no-unused-vars
const game = new Phaser.Game(config);

const canvas = document.querySelector('canvas');

console.log(game);

我输入

npm run webpack-dev-server --mode development

并在 localhost:8080 启动 webpack-dev-server

然后我得到这些错误:

这些是控制台中的错误。 Chrome 浏览器。

这些是网络中的错误。 Chrome浏览器

这些是控制台中的错误。火狐浏览器。

Firefox 没有任何网络活动。一个请求都没有。

index.html

    <!doctype html> 
    <html lang="en"> 
    <head> 
        <meta charset="UTF-8" />
        <title>Making your first Phaser 3 Game - Part 1</title>
        <style type="text/css">

        </style>
    </head>
    <body>
    </body>
    </html>

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');


const config = {
  entry: './src/scripts/main.js',
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
      },
      {
        test: /\.scss$/,
        use: [
          'style-loader',
          'css-loader',
          'sass-loader',
        ],
      },
      {
        test: /\.(jpe?g|png|gif|svg)$/i,
        use: {
          loader: 'file-loader?name=/src/assets/[name].[ext]',
          options: {
            name: '[name].[hash].[ext]',
            outputPath: 'assets/',
          },
        },
      },
      {
        test: /\.html$/i,
        loader: 'html-loader',
      },
    ],
  },
  output: {
    path: path.resolve(
      __dirname,
      'dist',
    ),
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'Output Management',
      template: './src/index.html',
    }),
  ],
};

module.exports = (env, argv) => {
  if (argv.mode === 'development') {
    config.devtool = 'source-map';
    config.output.filename = 'main.bundle.js';
  }

  if (argv.mode === 'production') {
    config.plugins.push(new CleanWebpackPlugin());
    config.output.filename = 'main.[hash].bundle.js';
  }

  return config;
};

This 是提出此问题时的回购协议。

【问题讨论】:

    标签: javascript webpack webpack-dev-server phaser


    【解决方案1】:

    你有一个 404。

    将您的main.js 更改为:

    function preload() {
      this.load.image('sky', require("../assets/sky.png").default);
      this.load.image('ground', require("../assets/platform.png").default);
      this.load.image('star', require("../assets/star.png").default);
      this.load.image('bomb', require("../assets/bomb.png").default);
      this.load.spritesheet('dude',
      require("../assets/dude.png").default,
        { frameWidth: 32, frameHeight: 48 });
    }
    

    现在执行:

    yarn start / npm start
    

    【讨论】:

    • 它正在工作! imgur.com/a/wTrEOiS 谢谢老兄。正如你的名字所说,你是一个传奇。
    • 我评论了 require.context('../assets') 行,一切照样正常。这个函数有什么作用?我一直在阅读 webpack.js.org/guides/dependency-managementstackoverflow.com/questions/54059179/what-is-require-context ,但仍然不明白它的作用以及为什么需要。
    • 删除它,因为这里没有必要。 This 解释得更好。它可以与动态requires 一起使用,在这种情况下,您事先并不知道确切需要哪个资源。它会将require.context 中指定的所有文件复制到您的 dist 文件夹中,并且您可以在运行时使用它们。
    猜你喜欢
    • 2019-01-25
    • 2018-02-25
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多