我想问是否有任何方法可以在开发模式下将React应用程序作为后台进程运行,这样它就不会占用终端。我学习计算机科学,我使用 SSH 连接到学校 PC。这是我的老师要求的方式。作为我的项目,我选择响应应用程序,遗憾的是,当我的应用程序运行时,我无法使用终端。有什么方法可以运行“npm run start”作为后台进程,这样我仍然可以正常使用终端,也许稍后会终止该进程??
我尝试过的: 在命令中使用 & (不起作用,引发错误), PM2.5, nohup 命令
非常感谢
使用 pm2
pm2 start "npm start" --name my_react_app
npm run start &
- 它将在后台运行,但会在屏幕上打印所有信息,您可以按 Ctrl+L 清洁屏幕,然后进行其他作业。npm run start > /dev/null &
- 与上面相同,但只会打印错误信息。npm run start > /dev/null 2>&1 &
- 这个不会打印任何信息。当你想结束它时,可以使用
jobs -l
查询它的PID,然后使用kill + PID
杀死它,或者使用fg
让它转到前面,然后按Ctrl+C结束进程。
另一种选择是使用终端多路复用器,如
Tmux
/screen
/Dvtm
,但需要学习成本。
您可以使用PM2。
这个网站有一个使用 React.JS 安装和运行 PM2 的教程: https://dev.to/taufiqtab/deploy-reactjs-product-build-with-pm2-5dfo
这取决于您使用的终端类型,但通常您可以在 Mac 上使用 cmd+T,在 Windows 上使用 ctrl+T 打开新的终端选项卡。这样您就可以在同一个终端中同时执行多项操作。希望这有帮助!
内部需要一些类似的功能(在后台手动启动),并且刚刚发现它与
systemd
配合得很好。
# /etc/systemd/system/react-dev-server.service
[Unit]
Description=React Development Server
After=network.target
[Service]
User=myuser
WorkingDirectory=/home/myuser/my-react-client
# check with "which yarn"
ExecStart=/usr/local/bin/yarn start
Restart=always
Environment=NODE_ENV=development
[Install]
WantedBy=multi-user.target
$ sudo nano /etc/systemd/system/react-dev-server.service # add content from above
$ sudo systemctl daemon-reload
# enable if you need autostart
# sudo systemctl enable your-service.service
$ sudo systemctl start react-dev-server.service
$ sudo journalctl -u react-dev-server.service
# ...
$ sudo systemctl stop react-dev-server.service
Sep 15 10:32:40 vivo7 systemd[1]: Started React Development Server.
Sep 15 10:32:40 vivo7 yarn[430284]: yarn run v1.22.22
Sep 15 10:32:40 vivo7 yarn[430284]: warning package.json: No license field
Sep 15 10:32:40 vivo7 yarn[430284]: $ react-scripts start
Sep 15 10:32:41 vivo7 yarn[430306]: Starting the development server...
Sep 15 10:32:42 vivo7 yarn[430306]: Compiled successfully!
Sep 15 10:32:42 vivo7 yarn[430306]: You can now view @myuser/my-react-app in the browser.
Sep 15 10:32:42 vivo7 yarn[430306]: Local: http://localhost:3000
Sep 15 10:32:42 vivo7 yarn[430306]: On Your Network: http://10.0.0.28:3000