首页 文章

如何使用expressJS提供ReactJS静态文件?

提问于
浏览
7

问题

我已经成功地为我的React应用程序的index.html文件提供了服务,但是 index.js 用我的第一个React组件取代了html文件中的 <root> 并没有在 ReactDOM.render 上触发 . 如何启动 index.js 文件?如果我对React应用程序服务的理解在某些方面存在偏差,我将非常感谢您的澄清 .

文件夹结构

  • / - 包含所有服务器端文件,包括 server.js

  • / client / - 包含所有React文件

  • / client / build / - 包含所有 生产环境 就绪的客户端文件

  • / client / build / index.html

  • / client / build / static / js / main.[hash].js - 似乎是 index.js 的缩小版本,其中包含我的React应用程序的 ReactDOM.render

当前部署

  • 我正在使用Facebook的create-react-app作为/ client /目录,包括npm run build自动填充/ client / build /

文件片段

// server.js
let app = express();
app.use(express.static(path.join(__dirname, '../client/public')));

这会成功加载create-react-app提供的默认index.html

// index.html
<body>
  <noscript>
    You need to enable JavaScript to run this app.
  </noscript>
  <div id="root"></div>
</body>

上面的代码部分可能/可能没用,但它是create-react-app附带的默认html文件 . 我是否需要使用引用缩小的 index.js 文件的脚本标记替换noscript标记?我试过了,并没有改变,但也许是因为不正确的相对路径制作 .

1 回答

  • 10

    通过试用/错误尝试了许多不同的东西后,解决方案非常简单:

    在静态调用中提供/ client / build文件夹,如下所示:

    app.use(express.static(path.join(__dirname, '../client/build')));
    

相关问题