[英]Can not start node process using pm2
我是node.js的新手,很難使用pm2來演示該應用程序。 當我轉到/srv/myapp
並運行yarn start
時,該應用程序運行良好,但是當我嘗試通過轉到/srv/myapp
並運行pm2 start index.js
進行妖魔化時,
我看到該過程似乎已經開始:
[PM2] Starting /srv/myapp/index.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ index │ 0 │ fork │ 14528 │ online │ 0 │ 0s │ 0% │ 16.0 MB │ root │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
但是前端沒有響應(相反,我收到502 errors
,並且節點服務器未按預期方式在端口3000
上偵聽( fuser 3000/tcp
返回任何結果)。
這有什么問題嗎? 我該如何解決?
通過命令檢查pm2日志: pm2 logs
如果沒有錯誤,則說明您的應用程序沒有問題。
pm2
使用節點啟動您的應用程序,一個問題是它不提供任何日志記錄或輸出,就像通過其他方式啟動應用程序一樣(例如, node index.js
這樣做),因此它並沒有真正讓您知道是否正在發生任何事情錯誤。
我一直發現,通過從pm2
之前的node
啟動它來測試您的應用程序是個好主意。
給定node index.js
會導致錯誤: import bb from 'bluebird';SyntaxError: Unexpected token import
,這聽起來像您正在使用ES6導入功能, 默認情況下Node不支持 。 我懷疑Yarn是啟用這些功能,還是將您的ES6代碼轉換為ES5以便在執行yard start
時可以運行Node,但是我對Yarn並不了解。
可能是您指向錯誤的文件,並且已經創建了一個已編譯的文件dist.js
(作為示例),Yarn正在使用不透明的start
命令愉快地運行。
編輯:查看源代碼后,似乎正在使用稱為babel-node
東西 。 請參閱package.json中的啟動腳本 :
"scripts": {
"start": "babel-node index.js",
pm2
不知道如何使用babel-node來運行index.js,即使它做到了,babel-node強烈建議您不要在生產中使用babel-node(大概是在使用pm2
):
不適用於生產用途您不應在生產中使用babel-node。 由於緩存存儲在內存中,因此不必要地增加了內存使用量。 由於整個應用程序都需要動態編譯,因此您還將始終遭受啟動性能損失。
查看帶有Babel的示例Node.js服務器,以了解如何在生產部署中使用Babel。
還有關於ES6模塊加載的說明:
ES6樣式的模塊加載可能無法按預期方式運行由於技術限制,babel-node REPL中不完全支持ES6樣式的模塊加載。
我強烈建議您添加一個build
腳本,以使用babel生成一個“ distribution”轉譯版本並進行部署!
"scripts": {
"start": "babel-node index.js",
"build": "babel index.js --out-file index-dist.js
或者沿着這些路線,運行yarn build
(或yarn run build
?),然后pm2 start index-dist.js
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.