2017-06-09 175 views
1

看來npm install --prefix ./server(沒有參數)不能用--prefix標誌。我只想從package.json安裝所有的軟件包。 所有這一切命令後,我得到的是:npm install不能用--prefix

NPM WARN ENOENT ENOENT:沒有這樣的文件或目錄,打開 '/home/.../ProjectName/server/package.json'

例如,我把npm install package_name -S --prefix ./server作爲例子,一切正常。然後NPM將在server中創建node_modules並添加package_name包。

我的文件結構是:

ProjectName 
| 
+-- client 
| +-- node_modules 
| +-- package.json 
+-- server 
| +-- node_modules 
+-- package.json 

「主」 package.json包含了所有的腳本(Heroku的和我)和服務器dependiencies。 client是Angular2應用程序,這就是它擁有自己的node_modules和package.json的原因。

我使用NPM 4.2.0。 5.0.3版本(最新版本?)似乎--prefix標誌根本不起作用。

編輯#1

我剛剛發現我可以解決我的問題與npm install(這將在我的項目文件夾中安裝node_modules),然後node_modules複製到server/node_modules。沒有該副本jasminetsc構建期間拋出錯誤。

現在我必須node_modules在主目錄和他們的副本server。這是如此奇怪..

編輯#2

根據@Damian Lattenero答案:

NPM --prefix ./server安裝./ProjectName/package.json

npm --prefix ProjectName/server install ./ProjectName/package.json

不能正常工作,併產生:

NPM ERR!代碼ENOLOCAL npm ERR!無法安裝 「RecursiveNotebook3 /的package.json」,因爲它不是一個目錄,而不是 用名.tgz的,名爲.tar.gz結尾或.TAR

這個工程文件:

npm --prefix ProjectName/server install。/項目名

但生成:

NPM WARN saveError ENOENT:沒有這樣的文件或目錄中,打開 '/home/tb/Projects/RecursiveNotebook3/server/package.json' NPM通知 創建一個lockfile作爲package-lock.json。你應該提交這個文件。 NPM WARN ENOENT ENOENT:沒有這樣的文件或目錄,打開一個 '/ home/ TB /項目/ RecursiveNotebook3 /服務器/的package.json'

package-lock.json旁邊node_modules

etc目錄旁邊node_modules

使用mongodb包構建(tsc -p server)時存在一些問題。

+0

tBlabs和第二個也沒有工作?這很奇怪,因爲它正在尋找服務器文件夾中的包json?我做了第一個和第二個的編輯 –

+0

嘿tBlas!把你的解決方案作爲答案,在這個網站是一個很好的做法;) –

回答

1

嘗試:

npm --prefix ./server install ./ProjectName/package.json 

npm install --prefix ./server ./ProjectName/package.json 

此外,爲了更好地瞭解--prefix做什麼,你可以檢查這兩個答案:

How to npm install to a specified directory?

npm - install dependencies for a package in a different folder?

+0

第一個選項似乎工作,但依賴於參數我得到了大量的奇怪的錯誤。我會盡快列出他們。 – tBlabs

+0

@tBlabs嗯我看,我認爲這是一個新問題,我認爲解決了原來的問題,不是嗎? –

+0

@tBlabs如果你在同一個問題中添加所有內容,那麼@tBlabs可能會引起混淆,原來的問題是向前一步,也許是其他問題,你應該問一個新的問題,我會很樂意與你一起檢查 –

1

運行最新版本的Ubuntu(Ubuntu 16.04.2 LTS)時,我遇到了與npm install相同的問題。我也遇到了ENOENT錯誤,表明npm找不到必要的文件。

當我安裝​​,如下所示下:

sudo apt-get install nodejs-legacy 

npm隨後編譯罰款,我的角應用部署,因爲它應該。

+0

我認爲它可以工作,很好,再加上一個 –

+0

以下軟件包有未滿足的依賴關係: nodejs-legacy:取決於:nodejs(> = 0.6.19〜dfsg1-3〜)但它不會被安裝 E:無法糾正問題,你已經拿到了破包。 我需要'node'還是'nodejs'包? – tBlabs

+0

我在Ubuntu 16.04.2 LTS下運行的版本如下: npm:5.0.3。 節點:4.2.6 nodejs包中包含nodejs二進制文件以及npm, ,因此不需要單獨安裝npm。 然而,對於一些NPM包運行 (如那些需要從源代碼編譯), 您需要安裝build-essential這個包: 命令和apt-get安裝建立必要的 關於的NodeJS遺留: 此軟件包包含舊版Node.js代碼的符號鏈接,要求將 二進制文件設置爲/ usr/bin/node(而不是Debian中提供的/ usr/bin/nodejs)。 –

0

SOLUTION

那些在package.json地解決了我的所有問題:

「腳本」:{

"init": "npm i && mv ./node_modules ./server && sudo npm i typescript -g", 

奇怪,但工程...