node.js - 如何让 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。不太确定接下来如何解决这个问题,任何点击都会有所帮助。谢谢!
解决方案
通过将此 shebang 添加到我的 .ts 应用程序的开头,我能够使 ts-node systemd 服务正常工作:#!/usr/bin/env ts-node-script
(记得 chmod +x 你的 .ts 文件)
我从这个答案中得到了它:
使用 ts-node 执行 typescript 文件时出错(将项目安装为全局模块后)
我也将您的问题用作资源,所以谢谢您的提问。
我的另一个建议(和当前的后备)是您可以将 ts 文件编译为 javascript 并仅使用 node.js 。如果您的 ts 程序将持续运行,则可能会出现 [警告:传闻] 内存泄漏问题。
推荐阅读
- python - python中是否有所有字母数字符号的列表?
- java - SQS 队列 URL 不同于 AWS CLI 和 Java SDK
- javascript - Shiny:在非活动的 tabPanel 上更新 DT
- omnet++ - 静脉中的不同模型
- laravel - 数组到字符串转换电子邮件唯一验证 Laravel
- c# - GridLayout 或 RectTransform 问题
- algorithm - 旋转没有孙子的二叉树
- vb.net - VB删除文本文件中的文本块
- laravel - Laravel 5.6 - 如何实现 404 页面/路由
- swift - 构建像 Snapchat 这样的 Firebase 数据库