首页 > 解决方案 > 如何让 systemd 在树莓派上使用 ts-node?

问题描述

我有一个树莓派,我正试图将它用作用打字稿编写的 nodejs 应用程序的伪主机。稍加阅读,我创建并启用了 systemd 服务,以便即使我没有通过 ssh 进入 pi 时也能保持进程运行。

systemd 服务如下所示:

[Unit]
Description=test ts app
Documentation=https://example.com
After=network.target

[Service]
Environment=NODE_PORT=3000
Type=simple
User=pi
Restart=on-failure
WorkingDirectory=/home/pi/Documents/NodeApp/
ExecStart=/home/pi/.nvm/versions/node/v14.16.1/lib/node_modules/ts-node/dist/bin.js src/server.ts

[Install]
WantedBy=multi-user.target

我已经设置了 ts-node 的全局路径,因为它没有找到它。使用此 ExecStart 会出错,因为它没有看到 ts-node 路径后面的参数。

Apr 26 22:54:35 raspi npm[2814]: /home/pi/.nvm/versions/node/v14.16.1/lib/node_modules/ts-node/dist/bin.js:14
Apr 26 22:54:35 raspi npm[2814]: function main(argv = process.argv.slice(2), entrypointArgs = {}) {
Apr 26 22:54:35 raspi npm[2814]:                    ^
Apr 26 22:54:35 raspi npm[2814]: SyntaxError: Unexpected token =

节点版本:v14.16.1 Npm 版本:6.14.12。不太确定接下来如何解决这个问题,任何点击都会有所帮助。谢谢!

标签: node.jsraspberry-pisystemdts-node

解决方案


通过将此 shebang 添加到我的 .ts 应用程序的开头,我能够使 ts-node systemd 服务正常工作:#!/usr/bin/env ts-node-script

(记得 chmod +x 你的 .ts 文件)

我从这个答案中得到了它:

使用 ts-node 执行 typescript 文件时出错(将项目安装为全局模块后)

我也将您的问题用作资源,所以谢谢您的提问。

我的另一个建议(和当前的后备)是您可以将 ts 文件编译为 javascript 并仅使用 node.js 。如果您的 ts 程序将持续运行,则可能会出现 [警告:传闻] 内存泄漏问题。


推荐阅读