私は Webpack/Phaser/Express プロジェクトを持っています。アプリをロードすると、Chrome コンソールで次のエラーが発生して画像をロードできません。
GET http://localhost:8080/assets/ui/blue_button03.png 500 (Internal Server Error)
GET http://localhost:8080/assets/ui/blue_button02.png 500 (Internal Server Error)
これらのイメージを Phaser にロードします。
this.load.image('blueButton1', 'assets/ui/blue_button02.png');
this.load.image('blueButton2', 'assets/ui/blue_button03.png');
フェイザー コードに含めようとするすべての静的ファイルで同じエラーが発生します。
ウェブパック構成:
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
// Phaser webpack config
const phaserModule = path.join(__dirname, '/node_modules/phaser/')
const phaser = path.join(phaserModule, 'src/phaser.js')
const definePlugin = new webpack.DefinePlugin({
__DEV__: JSON.stringify(JSON.parse(process.env.BUILD_DEV || 'true')),
WEBGL_RENDERER: true, // I did this to make webpack work, but I'm not really sure it should always be true
CANVAS_RENDERER: true // I did this to make webpack work, but I'm not really sure it should always be true
})
module.exports = {
entry: {
app: './src/js/main.js',
vendor: ['phaser']
},
devtool: '#source-map',
mode: 'development',
target: 'web',
output: {
pathinfo: true,
path: path.resolve(__dirname, 'dev'),
publicPath: '/',
library: '[name]',
libraryTarget: 'umd',
filename: '[name].js'
},
plugins: [
definePlugin,
new HtmlWebpackPlugin({
filename: './index.html',
template: './src/html/index.html',
chunks: ['vendor', 'app'],
chunksSortMode: 'manual',
minify: {
removeAttributeQuotes: false,
collapseWhitespace: false,
html5: false,
minifyCSS: false,
minifyJS: false,
minifyURLs: false,
removeComments: false,
removeEmptyAttributes: false
},
hash: false
}),
new webpack.NoEmitOnErrorsPlugin()
],
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
// Loads the javacript into html template provided.
// Entry point is set below in HtmlWebPackPlugin in Plugins
test: /\.html$/,
use: [
{
loader: "html-loader",
//options: { minimize: true }
}
]
},
{
test: /\.(png|svg|jpg|gif|wav)$/,
use: ['file-loader']
},
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
},
{ test: /phaser-split\.js$/, use: ['expose-loader?Phaser'] },
{ test: [/\.vert$/, /\.frag$/], use: 'raw-loader' }
]
}
}
それが私のserver.jsでwebpack-dev-middlewareを使用する方法です:
const app = express(),
DIST_DIR = __dirname,
HTML_FILE = path.join(DIST_DIR, 'index.html'),
compiler = webpack(config);
var server = http.Server(app);
// binds the serv object we created to socket.io
var io = socketio(server);
app.use(webpackDevMiddleware(compiler, {
publicPath: config.output.publicPath
}));
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();
});
});
const PORT = process.env.PORT || 8080;
プロジェクトの構造:
+-- dev
| |
| +-- assets
| +-- index.html
| +-- app.js
| +-- server.js
| +-- vendor.js
|
+-- src
| |
| +-- assets
| +-- html
| |
| | +-- index.html
| |
| +-- server
| |
| | +-- server.js
| |
| +-- js
| |
| | +-- main.js
| |
|
+-- package.json
|
+-- webpack.config.js
適切に機能させるためのアドバイスはありますか?webpack-dev-middleware アプリを使用していない場合は正常に動作します。しかし、変更を加えるたびにプロジェクトを再構築するのは面倒です。