Публичный актив 404 на сборке продукта (webpack) - PullRequest
0 голосов
/ 28 сентября 2019

Я не очень знаком с веб-пакетом, и у меня есть эта проблема, когда я не могу получить доступ к своим активам на Prod - он возвращает 404

У меня есть такая структура:

- repo
 - public
   - index.html
   - images
     - animals
       - dog.png
   - audio
     - growl.mp3

  - src
    - index.js
    ... other files

Теперь на моем index.js (или других файлах) я получаю доступ к изображениям, выполняя:

import { Loader, utils, Sprite, AnimatedSprite } from 'pixi.js'

loader
    .add('images/animals/dog.png' )
    .load(async () => {})
... other codes

И это прекрасно работает на локальном компьютере, но при развертывании на производстве выдает

Failed to load resource: the server responded with a status of 404 () - /images/animals/dog.png:1 Failed to load resource: the server responded with

Мой веб-пакет выглядит так:

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const CircularDependencyPlugin = require('circular-dependency-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')

const isProd = process.env.NODE_ENV === 'production'

module.exports = {
  mode: isProd ? 'production' : 'development',
  entry: './src/index.js',
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'build'),
    publicPath: '/',
  },
  resolve: {
    modules: [path.resolve(__dirname, 'src'), 'node_modules'],
  },
  devtool: isProd ? 'cheap-module-eval-source-map' : 'source-map',
  devServer: {
    hot: true,
    watchContentBase: true,
    contentBase: [
      path.resolve(__dirname, 'public'),
      path.resolve(__dirname, 'build'),
    ],
    publicPath: '/',
  },
  module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
          },
        },
      },
    ],
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      template: 'public/index.html',
    }),
    new CircularDependencyPlugin({
      exclude: /a\.js|node_modules/,
      failOnError: false,
      cwd: process.cwd(),
    }),
    new CopyWebpackPlugin([
      { from: 'public/audio', to: 'audio' },
      { from: 'public/images', to: 'images' },
    ]),
  ],
}

1 Ответ

0 голосов
/ 30 сентября 2019

Хорошо, так что я понял это.

Оказывается, мне просто нужно сделать все от publicPath до '' (пустая строка)

...