nginx - 在生产中部署 Vue js 似乎更难
问题描述
我使用Vue-cli 3创建了简单的 Vue JS 应用程序。我有一个带有 Nginx + php 的 digitalocean 液滴。我的目标是在同一个 droplet 上托管 Vue App。我已经尝试过:
- 将某些添加
location /
到 nginx conf。 - 使用了这个简单的节点服务器:https ://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations
我得到的是Uncaught SyntaxError: Unexpected token <
:
有趣的是,当我使用npm run build
将生产资源放入dist
目录并使用php -S localhost:8080
它时,它就像一个魅力一样托管。但是与简单节点 js 服务器相同的事情会导致上面屏幕截图中的结果。
我已经连续挣扎了2天。请帮帮我。
解决方案
我在同样的问题上苦苦挣扎。问题是当浏览器请求 javascript 和 css 文件时,会发送索引文件的内容。
按照本教程的第 3 步解决。
由于 Vue 只是一个前端库,托管它并执行诸如提供资产之类的事情的最简单方法是创建一个简单的 Express 友好脚本,Heroku 可以使用该脚本来启动一个迷你 Web 服务器。如果您还没有,请快速阅读 Express。之后,添加快递:
npm install express --save
现在将 server.js 文件添加到项目的根目录:
// server.js
var express = require('express');
var path = require('path');
var serveStatic = require('serve-static');
app = express();
app.use(serveStatic(__dirname + "/dist"));
var port = process.env.PORT || 5000;
app.listen(port);
console.log('server started '+ port);
在那之后,由于这个想法首先是为 index.html 提供服务,所以我借用了这个想法并将以下内容添加到我的代码中(请注意,如果请求是 html,我使用了 sendFile):
app.use((req, res, next) => {
res.status(404)
if (req.accepts("html")) {
res.sendFile(path.join(__dirname + "/dist/index.html"))
return
}
if (req.accepts("json")) {
res.send({error: "Not found"})
return
}
res.type("txt").send("Not found")
})
推荐阅读
- primefaces - 如何检测单击的按钮的名称并设置要评估的布尔变量?
- java - CardView 点击下载PDF
- wpf - WPF:禁用组合框中的选定项目
- javascript - 使用 vee-validate 离开页面前提示
- swift - Swift 顺序执行函数
- javascript - 节点进程不以猫鼬索引退出
- php - 无法使用 apache 从根 Centos 7 引用的 php 中的 scandir()
- javascript - Node.js 异步/等待模块导出
- oracle - 将 nls 日期格式传递给 SQL Loader 控制文件
- google-chrome - chrome 的 200 和 200 OK 有什么区别?