2012-12-25 219 views
17

當我運行:在當前目錄NPM安裝模塊

npm install my-app 

該應用程序安裝到node_modules /我的應用程序內/ ...

我也試過

npm install -g my-app 

但是,也不起作用。

如何將模塊直接安裝到當前目錄中?

+1

HTTP來配置你的項目://計算器。 com/questions/14742553/npm-local-install-package-to-custom-location#answer-14867050這回答你的問題 – Savaratkar

回答

30

npm install安裝軟件包或者locally or globally

  • 本地npm會在當前目錄下名爲node_modules現有的文件夾,並創建爲每個文件夾中安裝包的文件夾。如果它在這裏找不到現有的node_modules文件夾,它將查看當前目錄的祖先,直到找到它。如果找不到,則會在當前目錄中創建一個。
  • 全局:如果使用-g(全局)選項,該軟件包將安裝在全局位置。該位置因Linux發行版而異,但/usr/local/lib/node_modules/packagename就是一個例子。 CentOS7使用/usr/lib/node_modules/packagename

當應用程序包是您希望用作命令的東西時,您應該只使用-g

就像如何全局變量在某些情況下,一種嚴重的,但也是必要的 ,全球包裝很重要,但如果需要的話不是 最好避免。

一般來說,經驗法則是:

  1. 如果您使用require('whatever')安裝要在你的程序中使用的東西, ,然後安裝在本地,在 你的項目的根。
  2. 如果您正在安裝要在 您外殼使用的東西,在命令行或某事上,全球安裝它,所以 它的二進制文件在你的PATH環境變量結束。

npm不會將包的文件直接安裝到當前目錄中。

但是,這實際上是一件好事。它使依賴文件與您的應用程序分開,並且Node automatically searches the node_modules folder when you require something

+24

你的第一個項目符號只是稍微真實。如果當前目錄中沒有'./ node_modules /'文件夾,那麼npm將搜索祖先目錄,直到找到一個包含'node_modules /'的目錄。如果找到一個,比如在grandparent目錄中,那麼'npm install packagename'會將'packagename'安裝在'../../ node_modules /'中。但是,如果它搜索文件樹直到到達根目錄並仍然沒有找到任何'node_modules /'文件夾,那麼你是正確的,npm將自動在當前目錄中生成該文件夾,並在那裏安裝軟件包。 – chharvey

+2

謝謝。這是爲我做的祖先目錄的事情,我只是在本地創建一個文件夾,瞧。 – Antoine

+0

謝謝!該父文件夾遍歷是我的問題。 – Fr0sT

4

你的當前目錄應該有一個package.json

然後寫npm install <module_name> --save-devnpm install <module_name> --save和作爲@dalu表示將安裝到node_modules目錄

15

,如果你想擁有本地的包,你需要一個package.json文件。

但是要創建package.json文件,您必須通過運行npm init來初始化npm文件。您可以使用npm install <module_name> --save[-dev]

+1

我很高興我讀了'第二'最佳答案。感謝分享! –

3

我認爲真正的問題,我和OP會想,是安裝我的應用程序內, 就像你安裝一個應用程序,即 安裝的頂級應用程序,我會 爲「使用」作爲應用程序而不是「需要」作爲模塊。

npm從我的應用程序 目錄中安裝了一個級別的事實,是純粹審美 反對由新的npm用戶。

當我開始使用NPM(不久前),我解決它具有一個git 項目作爲安裝程序,克隆混帳,運行安裝腳本,但現在我已經習慣了它, 它不打擾我讓應用程序在「錯誤」的文件夾中。

只需在正確的位置 和您的用戶設置一些.sh,.bat或快捷方式,不會注意到。

4

這是你可以安裝一個模塊到當前目錄:

npm i --prefix ./ my-app

正如其他人所說,正確的方法是通過package.json

+0

最簡單的解決方案! –