Attualmente sto configurando un sito che utilizza un server webpack-dev e un router backbone.Il server di sviluppo Webpack non può caricare URL annidati (errore GET 404)
Fino ad oggi, tutto sembrava funzionare (ad esempio potrei andare a http://localhost:3333
per la mia home page e http://localhost:3333/login
per la mia pagina di login.
Ma oggi ho provato ad andare al mio primo URL nidificato, http://localhost:3333/people/1
, e la mia console gettare un errore 404 GET
l'errore esatto è stato questo:.. http://localhost:3333/people/build/bundle.js 404 (Not Found)
sembra che il mio server webpack sta provando a cercare i file corretti al server sotto la directory sbagliato Se questo è corretto, Non ne ho idea come risolvere questo problema. Ho esaminato altre domande di overflow dello stack e problemi di github, ma inutilmente. qualche idea?
Avvio il server utilizzando gulp. Qui è la mia gulpfile:
var gulp = require("gulp");
var webpack = require("webpack");
var server = require("webpack-dev-server");
var config = require("./webpack.config");
gulp.task("serve", function() {
new server(webpack(config), {
publicPath: config.output.publicPath,
historyApiFallback: true,
hot: true,
quiet: false,
stats: { colors: true, progress: true },
}).listen(3333, "localhost", function (err, result) {
if (err) {
console.log(err);
} else {
console.log("Listening at localhost:3333!");
}
});
});
gulp.task("default", ["serve"]);
Ecco il mio webpack file di configurazione:
var webpack = require("webpack");
module.exports = {
entry: [
__dirname + "/app/app.js",
"webpack/hot/dev-server",
"webpack-dev-server/client?http://localhost:3333/",
],
output: {
path: __dirname + "/build",
filename: "bundle.js",
publicPath: "http://localhost:3333/",
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
{ test: /\.jsx$/, exclude: /node_modules/, loader: "react-hot-loader!babel-loader" },
{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },
{ test: /\.scss$/, exclude: /node_modules/, loader: "style!css!sass" },
]
},
resolve: {
root: __dirname,
extensions: ["", ".js", ".jsx"],
},
}
Edit: ho appena scoperto che posso direttamente colpire gli URL http://localhost:3333/#/people/1
o http://localhost:3333/#people/1
e tutto funziona come previsto.
Esiste una configurazione che mi consenta di non includere il simbolo della sterlina nell'url? Spero che questo aiuti a dare più contesto alla mia domanda.
Follow-up: dispongo di un componente globale App
che inizializza un router backbone e chiama Backbone.history.start({ pushState: true })
. Ecco uno snippet di codice.
class App {
constructor() {
console.log("starting up");
this.Router = new Router();
Backbone.history.start({ pushState: true });
}
}
module.exports = new App();
Se si nota la console.log
nel costruttore, questo si chiama su pagine non nidificati che possono rendere, ma non sulle pagine nidificate che non possono.
I bug più ovvi a volte sono i più difficili da individuare. Grazie per avermi risparmiato tempo e frustrazione :) – Pandaiolo