如何创建服务于 Vue.js SPA 的 Node.js Express 应用程序?

Posted

技术标签:

【中文标题】如何创建服务于 Vue.js SPA 的 Node.js Express 应用程序?【英文标题】:How to create Node.js Express app serving a Vue.js SPA? 【发布时间】:2019-05-13 00:05:11 【问题描述】:

我正在尝试建立一个 Node.js 项目,该项目使用 Express 来提供一些后端 API 并提供一个使用 Vue.js 构建的 SPA。

当我使用 Vue cli 初始化项目时,我得到例如src/main.ts 主文件和命令 npm run serve 运行开发服务器并监视更改,npm run build 构建生产版本。

当我使用Express application generator 创建项目时,我得到./app.js 主文件和npm start 来启动服务器并观察变化。

如何将它们组合成一个项目,由同一个 Express 服务器提供服务?最好让单个命令监视+更新服务器和客户端的更改?我想使用 Vue 单文件组件和 TypeScript,这(可能?)需要构建步骤。

(我不需要 Vue 模板的动态服务器端渲染,只需要提供的静态 SPA 应用程序。我更喜欢 TypeScript,但 javascript 答案也很好。)

【问题讨论】:

所以你想要一个同时启动服务器和客户端的命令? 单个命令应该启动托管客户端的服务器。但是应该注意对两者的更改并自动重新编译。 【参考方案1】:

这些对于您的开发和生产环境会有所不同...

对于开发,请查看concurrently - 它基本上允许您在 package.json 中创建一个脚本来同时启动客户端和服务器,并监视更改等...

对于生产,您的 app.js 中需要这样的内容:

if (process.env.NODE_ENV === 'production') 
  app.use(express.static('client/build'));

  const path = require('path');
  app.get('*', (req, res) => 
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
  );

(上面的代码假设你的目录结构在运行npm run build之后有一个带有构建文件夹的客户端文件夹我更熟悉React而不是Vue......但逻辑应该是相同的...... .)

【讨论】:

以上是关于如何创建服务于 Vue.js SPA 的 Node.js Express 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 Vue js SPA 部署到我的 Django 服务器中?

node创建一个Vue项目

如何创建vue.js项目和node.js项目?

vue.js初级教程--02.环境搭建

如何使用 Vue.js 制作 MPA? (或者这个项目应该是一个SPA?)

Vue.js - 如何将所有请求重定向到同一个组件