我试图将我的SvelteKit应用程序部署到Linux服务器,并让它自动启动和自动重启。
当使用node index.js
作为root用户直接启动它时,它工作得非常好,但当尝试将它作为systemd服务或crontab启动时,它会将以下错误输出到我的errors.log文件:
SyntaxError: Unexpected token '?'
at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)
file:///*path-to-app*/handler.js:768
const DOMException = globalThis.DOMException ?? (() => {
这是/lib/systemd/system/.
中的服务systemctl文件
[Unit]
Description = *description*
[Service]
Type = simple
User = root
Group = root
LimitNOFILE = 4096
Restart = always
RestartSec = 10s
StandardOutput = append:/*path-to-app*/logs.log
StandardError = append:/*path-to-app*/errors.log
ExecStart = node /*path-to-app*/index.js
[Install]
WantedBy = multi-user.target
当尝试进行故障排除时,很多回复说这发生在旧的NodeJS版本上,但是在我的服务器上,版本18.14.2是唯一安装的版本。另一个常见的技巧是将"type": "module"
添加到我的package.json文件中,我已经这样做了。当用最新的SvelteKit版本和节点适配器构建一个空的框架项目时,也会发生这种情况。有人能告诉我为什么同一个用户的同一个命令会导致不同的结果吗?帮助将不胜感激。
节点版本:18.14.2
操作系统:Ubuntu 22.04.2
1条答案
按热度按时间des4xlb01#
reddit上的radavenport 84帮助我找到了答案。运行服务中的哪个节点会显示它在“/usr/bin/node/”中使用了不同的节点版本,该版本肯定是默认安装的。我唯一安装过的版本是通过nvm安装的18.14.2。但在ExecStart中指定18.14.2版本的完整路径解决了我的问题: