[英]Heroku ENOENT: no such file or directory due to faulty express.js routing
[英]Express.js: No Such file or directory
我用apt-get install nodejs
安裝了節點。 然后我用apt-get install npm
。 現在當我嘗試運行express
我得到
$ express
/usr/bin/env: node: No such file or directory
如何解決此錯誤?
Ubuntu 中有兩個名稱相似的包, node和nodejs 。
node
這樣做,
說明-en:業余分組無線電節點程序。 節點程序接受 TCP/IP 和分組無線電網絡連接,並為用戶提供一個界面,允許他們使用各種業余無線電協議與遠程主機建立網關連接。
nodejs
這樣做,
描述-zh:Node.js 基於事件的服務器端 javascript 引擎 Node.js 在設計上類似於 Ruby 的 Event Machine 或 Python 的 Twisted 等系統,並受其影響。 它將事件模型更進一步——它將事件循環呈現為一種語言結構而不是一個庫。 Node.js 捆綁了幾個有用的庫來處理服務器任務:系統、事件、標准 I/O、模塊、計時器、子進程、POSIX、HTTP、多部分解析、TCP、DNS、斷言、路徑、URL、查詢字符串。
Fedora 也遵循類似的包命名方案。 因此,必須將nodejs
的二進制文件從原始node
重命名為nodejs
。 然而,這在技術上並不符合:大多數 nodejs 程序(和使用 npm 安裝的庫)都假設 node 二進制文件是node
。 如果你想解決這個問題,最簡單的方法就是將兩者符號鏈接在一起。 如果你走這條路,不要安裝處理業余分組無線電內容的node
包。
sudo ln -s /usr/bin/nodejs /usr/local/bin/node
或者,在 node 的情況下,我建議使用n
而不是安裝node
。 只需安裝 npm(將安裝 node),然后刪除 npm,然后告訴 apt 清理它。 為此,只需運行
sudo apt-get install npm
sudo npm install -g n
sudo n latest
sudo apt-get --purge remove npm
sudo apt-get autoremove
還有其他二進制發行版管理器甚至可以從像nvm
這樣的 shell 腳本工作,但我個人更喜歡n
。 將n
視為僅用於一件事的 apt:它安裝到/usr/local/bin
的節點二進制文件。
為什么要刪除 npm? 不是。 apt-get --purge remove
只能刪除包管理器安裝的東西。 n latest
包管理器之外的n latest
作品。 如果你這樣做,有兩個 npm,
apt-get
安裝的版本。n latest
安裝的版本。擁有發行版的舊版本毫無意義。 而且,更糟糕的是,如果該版本有效,它可能會安裝到不同的位置,並在其中進行 Debian 修改,假設 Debian 安裝目錄。 最好使用其中之一/或但不要同時使用。
你應該安裝 nodejs-legacy 包,它有一個從 /usr/bin/node 到 /usr/bin/nodejs 的鏈接
$ sudo apt-get install nodejs-legacy
就我而言,這是因為在我的PATH
環境變量中,我有“~/progs/node/bin/”,而“~”似乎沒有被env
解析......用真正的完整路徑替換它(“/ home/myuser/node/bin") 解決了我的問題。
這個解決方案
export PATH="$HOME/opt/nodejs/bin:$PATH"
為我解決了這個問題(假設 $HOME 變量設置正確,它應該可以工作)。 它還允許我避免對我的主目錄的路徑進行硬編碼(例如,如果需要,我可以使用不同的帳戶/服務器重用我的 .bash_profile)
在 cmd 中執行此操作
sudo apt-get install nodejs-legacy
chmod your folder 700 (optional)
免責聲明:僅適用於通過部署工具運行的 bash 命令
注意:在遠程服務器中,如果您可以運行 node 命令,但通過部署工具(如 shipit server)拋出/usr/bin/env: 'node': No such file or directory
。 創建符號鏈接將解決錯誤。
sudo ln -s $(which node) /usr/bin/node
sudo ln -s $(which npm) /usr/bin/npm
sudo ln -s $(which pm2) /usr/bin/pm2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.