【发布时间】:2017-01-26 03:18:12
【问题描述】:
我从这个优秀的教程开始:https://www.fullstackreact.com/articles/using-create-react-app-with-a-server/ 并尝试通过添加新页面来扩展它以通过新路线提供服务。然而,经过几个小时的闲逛,我意识到 create-react-app 正在以某种方式发挥作用(如mentioned in their docs here):
`create-react-app` configures a Webpack development server to run on `localhost:3000`.
This development server will bundle all static assets located under `client/src/`.
All requests to `localhost:3000` will serve `client/index.html` which will include Webpack's `bundle.js`.
关键引用是“对localhost:3000 的所有请求都将服务于client/index.html”。我不知道这是怎么发生的。所以即使我和routes/index.js 混在一起:
app.route('/')
.get(function (req, res) {
res.sendFile(bipath.join(__dirname, '../public', 'THISCANBEANYRANDOMFILENAME.html'))
});
没关系,因为 webpack 无论如何都会以某种方式将localhost:3000 指向 index.html。它在哪里以及如何做到这一点?底线我正在尝试修改我的路由以提供新的 html 文件并且遇到各种文件路径问题(是的,即使我使用 require('path') 或 sendFile(...,{root: __dirname})。)
那么这里到底发生了什么,你能给我一些提示来帮助我吗?
编辑:这可能来自 babel 和 webpack - 我不太清楚 babel 从哪里开始以及 webpack 从哪里开始。
【问题讨论】:
-
如果您需要更多信息,这里是 github 上的文件:github.com/sw-yx/fcc-nightlife
-
Babel 所做的只是转译。我不明白为什么你认为点击根端点并没有点击路径——这就是我们正在谈论的
index.html,不是吗? -
是的。我可以向自己证明,点击根端点并没有点击路径,因为我故意编辑了 sendFile 以发送一个不存在的文件 - 上面屏幕截图中的“indextest.html”,当我在浏览器中点击它时,它仍然提供 INDEX.HTML .所以很明显它被 webpack 开发服务器在某个地方截获了。什么是黑魔法是我什至在任何地方都看不到任何 webpack 开发服务器配置(我已经发布了 github)所以我不知道它是如何进行这些拦截的。
-
你在重新编译吗? (嗯,重新编译和捆绑,通过观看,还是...?)
-
@DaveNewton 是的,每次都重新编译。它是一个真实的东西。该 create-react-app 引用提供的关于拦截的证据,以及 Jon 的 cmets 下面的证据表明存在这种拦截的东西。我不知道这个黑魔法是怎么发生的!