Node.js /在react with webpack应用程序中找不到src/bundle.js
下面是我的server.js文件:Node.js /在react with webpack应用程序中找不到src/bundle.js,node.js,reactjs,webpack,Node.js,Reactjs,Webpack,下面是我的server.js文件: import path from 'path'; import express from 'express'; import webpack from 'webpack'; import middleware from './src/middleware'; const app = express(); var port = process.env.PORT || 8080; if(process.env.NODE_ENV === 'develop
import path from 'path';
import express from 'express';
import webpack from 'webpack';
import middleware from './src/middleware';
const app = express();
var port = process.env.PORT || 8080;
if(process.env.NODE_ENV === 'development') {
const config = require('./webpack.config.dev');
const compiler = webpack(config);
app.use(require('webpack-dev-middleware')(compiler, {
noInfo: true,
publicPath: config.output.publicPath,
stats: {
assets: false,
colors: true,
version: false,
hash: false,
timings: false,
chunks: false,
chunkModules: false
}
}));
//app.use(require('webpack-hot-middleware')(compiler));
app.use(express.static(path.resolve(__dirname, 'src')));
} else if(process.env.NODE_ENV === 'production') {
app.use(express.static(path.resolve(__dirname, 'dist')));
}
app.get('*', middleware);
app.listen(port, '0.0.0.0', (err) => {
if(err) {
console.error(err);
} else {
console.info(path.resolve(__dirname, 'src'));
console.info('Listening at '+port);
}
});
My webpack.config.dev.js:
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: './src/middleware.js',
output: {
path : path.resolve('./src'), // always use absolute paths
filename : 'bundle.js',
publicPath : '/assets/'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('development')
}
})
],
module: {
loaders: [
{
test: /\.css$/,
loader: 'style-loader'
}, {
test: /\.css$/,
loader: 'css-loader',
include: path.join(__dirname, 'node_modules'),
query: {
modules: true,
localIdentName: '[name]__[local]___[hash:base64:5]'
}
},
{
test: /\.js$/,
loader: 'babel',
include: path.resolve(__dirname, 'src'),
query: {
presets: [ 'react-hmre' ]
}
},
{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
]
}
};
这是我的中间件:
import React from 'react';
import { renderToString } from 'react-dom/server';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import { match, RouterContext } from 'react-router';
import reducers from './reducers';
import routes from './routes';
export default (req, res) => {
match({ routes, location: req.url }, (error, redirectLocation, renderProps) => {
if(error) {
res.status(500).send(error.message);
} else if(redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search);
} else if(renderProps) {
res.status(200).send(`
<!DOCTYPE html>
<html>
<head>
<title>Req Management</title>
<link rel="stylesheet" href="https://unpkg.com/react-select/dist/react-select.css">
</head>
<body>
<script src='/src/bundle.js'></script>
<div id='app'>${renderToString(
<Provider store={createStore(reducers)}>
<RouterContext {...renderProps} />
</Provider>
)}</div>
</body>
</html>
`);
} else {
console.log("inside else");
res.status(404).send('Not found');
}
});
};
这是我的index.js:
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { Router, browserHistory } from 'react-router';
import { syncHistoryWithStore } from 'react-router-redux';
import reducers from './reducers';
import routes from './routes';
import { applyMiddleware, createStore } from "redux"
import logger from "redux-logger"
import thunk from "redux-thunk"
const middleware = applyMiddleware(thunk, logger());
const store = createStore(reducers, middleware);
const history = syncHistoryWithStore(browserHistory, store);
render(
<Provider store={store}>
<Router history={history} store={store}>
{ routes }
</Router>
</Provider>,
document.getElementById('app')
);
if(process.env.NODE_ENV == 'development' && module.hot) {
module.hot.accept('./reducers', () => {
store.replaceReducer(require('./reducers').default);
});
}
从“React”导入React;
从'react dom'导入{render};
从'react redux'导入{Provider};
从“react Router”导入{Router,browserHistory};
从“react router redux”导入{syncHistoryWithStore};
从“./reducers”导入减速机;
从“./routes”导入路由;
从“redux”导入{applyMiddleware,createStore}
从“redux记录器”导入记录器
从“redux thunk”导入thunk
const middleware=applyMiddleware(thunk,logger());
const store=createStore(还原器、中间件);
const history=syncHistoryWithStore(浏览器历史记录,存储);
渲染(
{routes}
,
document.getElementById('app')
);
if(process.env.NODE_env==“development”和&module.hot){
模块.hot.accept('./减速机',()=>{
store.replaceReducer(require('./reducers')。默认值);
});
}
我正试图将此代码部署到Heroku。在webpack.config.dev.js文件中做了一些更改。无法恢复。在代码在本地正常工作之前。现在也不在本地工作
关于为什么您的代码不能在本地工作。这可能是因为你的拼写错误。您正在检查:
if(process.env.NODE_ENV === 'develospment') {
你大概是指“发展”…这可能是由以下原因造成的:
app.use(express.static(path.resolve(__dirname, 'src')));
这使得src/
成为静态资源的根;换句话说,/SOME.FILE
被查找为src/SOME.FILE
。将其扩展到您的url/src/bundle.js
,它将被查找为src/src/bundle.js
,这显然是不正确的
有几种解决方案:
- 在HTML中使用
而不是/bundle.js
/src/bundle.js
- 在静态中间件的路径前面加上
:/src
app.use('/src', express.static(path.resolve(__dirname, 'src')));
我认为后者更好。解决了打字错误。bundle.js仍获得404。请帮忙。你能提供上面代码中使用的目录结构和食物的截图吗?我已经附上了文件夹结构图。我不明白你说的食物是什么意思。你能详细说明一下吗?我之前已经从你的问题中删除了请求,作为一名编辑,我希望问题贡献者阅读并理解发送给他们的通知小部件的编辑消息。由于这个问题包含紧急乞讨,我投了反对票。请不要添加,记住这里的大多数人都是志愿者。谢谢大家!@阿披舍克:对不起,那是个打字错误。不是这样的food@halfer.. 我为此道歉。。谢谢你的提醒。。将确保它不会再次发生。。。谢谢
app.use('/src', express.static(path.resolve(__dirname, 'src')));