2015-12-14 23 views
3

我試圖讓節點和Heroku一起運行,但我早早就陷入了困境。繼this guide後,我無法在本地看到我的Heroku應用。運行Heroku缺失節點模塊上的應用程序錯誤(但它看起來像它的安裝)

heroku local web 

,並打算爲localhost:5000產生以下錯誤:

Error: Cannot find module 'ejs'

我試過npm install ejs -g的建議here,它看起來像工程npm list -g --depth=0顯示[email protected]安裝。我能做些什麼來解決這個奇怪的錯誤?

+0

您是否試過現在只是刪除'ejs'作爲依賴,以查看它是否在沒有它的情況下正常啓動(修改package.json) – adeneo

+0

@adeneo是的。該頁面正常加載。我覺得我最終需要'ejs'模塊,儘管如果它被包含在本教程的dep中。你有什麼想法可以解決這個問題嗎? EJS看起來就像下劃線/ lodash模板(如果我沒有弄錯)。是否值得花時間試着讓它工作,或者我只是把它取代。 – 1252748

+0

我真的很喜歡EJS,一直都在用它,我討厭Jade,但那只是我。下面的答案可能會涉及到某些內容,但是由於EJS是您的依賴項的一部分,所以您只需在所使用的目錄中調用'npm install',並且所有依賴項都應該以自動方式安裝。 – adeneo

回答

2

npm install -g在全局安裝軟件包。當你與

var ejs = require('ejs') 

您需要npm install --save ejs安裝引用它們

節點無法找到全球已安裝的軟件包。這將包安裝到本地node_modules目錄,並將其保存到您的package.json

This is because when node looks for a package所在的路徑不與./它看起來在當前目錄中的node_modules目錄一後指定的目錄開始包。然後它上升到一個目錄並執行相同的操作,保持循環直到到達文件系統的根目錄。

例如如果您在/users/thomas/src/myproject是它會尋找:

/users/thomas/src/myproject/node_modules/ejs 
/users/thomas/src/node_modules/ejs 
/users/thomas/node_modules/ejs 
/users/node_modules/ejs 
/node_modules/ejs 

如果它不能在那些地方的一個存在,它會不會被發現。

There are some deprecated ways,你可以把它看在其他地方爲好,但這些不推薦,因爲它涉及到使用它是很困難的環境變量要記得上部署的機器設置)

此外,如果你」重新使用heroku,您需要將包列出在您的package.json文件的dependencies中,以便讓heroku知道如何安裝它。 npm install -g不添加條目到您的package.json

然而,一些建議。

  1. 請勿使用EJS。那裏有更好的(現在維護的)模板包。我們在一箇舊的遺留系統中使用EJS,比任何事情都更令人沮喪。
  2. 永遠不要用-g安裝軟件包,除非你真的希望該工具是全球性的。大多數情況下,你希望它在你的項目中是本地的。
+0

謝謝。我只是使用'-g'作爲最後的手段。我試過了普通的'install ___ --save',但不明白爲什麼它不起作用。你能推薦一個比EJS更令人沮喪的模板嗎? – 1252748

+0

@ thomas我在一些項目中使用了把手和玉石,並不介意使用它們。你可能會看到哪一個支持你的用例。如果在執行'install'後仍然無法找到模塊,請檢查所有這些路徑,或在npm安裝日誌中尋找瘋狂錯誤? – tkone

+0

我是否需要安裝[日誌](https://www.npmjs.com/package/log),或者在某處是否有全局的npm日誌? – 1252748

相關問題