gpt4 book ai didi

javascript - 与 Node 服务器一起使用时,webpack 创建的bundle.js 未加载

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:57 25 4
gpt4 key购买 nike

我是 Reactjs 和 webpack 的新手。我正在尝试使用 Node 和 React 制作一个示例应用程序。我选择 Webpack 作为模块打包器。这是我的项目结构

Project  
|--index.html
|--package.json
|--server.js
|--webpack.config.js
|--app/main.js
|--app/routes.js
|--app/components/login.js

webpack.config.js

module.exports = {
entry: "./app/main.js",
output: {
sourceMapFilename: "build/bundle.js.map",
filename: "build/bundle.js"
},
resolve: {
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [{
test: /.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'react']
}
}, {
test: /\.css$/,
loader: "style-loader!css-loader"
}, {
test: /\.png$/,
loader: "url-loader?limit=100000"
}]
}
}

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>New Eden Faces</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,900"/>
</head>
<body>
<div id="app">{{ html|safe }}</div>
<script type="text/javascript" src="build/bundle.js"></script>
</body>
</html>

在我的 server.js 中,我添加了一个中间件

app.use(function(req, res) {
Router.match({ routes: routes.default, location: req.url }, function(err, redirectLocation, renderProps) {
if (err) {
res.status(500).send(err.message)
} else if (redirectLocation) {
res.status(302).redirect(redirectLocation.pathname + redirectLocation.search)
} else if (renderProps) {
var html = ReactDOM.renderToString(React.createElement(Router.RoutingContext, renderProps));
var page = swig.renderFile("./index.html", {html:html});
res.status(200).send(page);
} else {
res.status(404).send('Page Not Found')
}
});
});

Webpack在我的根目录下生成build/build.js(与server.js和index.html并行)
当我运行 Node 服务器并尝试获取 http://localhost:3007/login 时,根据在routes.js中配置的路由,我的登录组件被渲染。
这是我的项目/app/components/login.js

import React from 'react';
import ReactDOM from 'react-dom';
import {Button} from 'react-bootstrap';
class Login extends React.Component {
render() {
return (
<div className="container">
<div className="row">
<div className="col-sm-5">
<strong>Username</strong>
</div>
<div className="col-sm-5 form-control">
<input type='text' className='form-control'/>
</div>
<Button bsSize="large">Hi</Button>
</div>

</div>
)
}
}

export default Login;

这是我输出的图像快照。

It is not loading my bundle.js why?

我可以看到它是在我的项目的 build 目录下生成的。为什么没有加载任何 css?即使我使用了react-bootstrap中的Button?为什么 css 类没有被应用。 Webpack 应该捆绑依赖的 css 文件,对吧?

几天来一直被困在这个问题上,但没有找到任何东西。任何帮助都会非常好。我希望我能说清楚并提前致谢。

最佳答案

需要指示您的 Node.js 应用程序提供静态 Assets 。 (即 build 目录下的 javascript)。例如:

const express = require('express');
const path = require('path');

const staticAssetsPath = path.resolve(__dirname, 'build');
app.use(express.static(staticAssetsPath));

关于javascript - 与 Node 服务器一起使用时,webpack 创建的bundle.js 未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40270154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com