簡體   English   中英

訪問 node.js 全局模塊

[英]Accessing a node.js global module

npm 文檔是這樣說的:

  • 如果您正在安裝要在程序中使用的東西,請使用 require('whatever'),然后將其安裝在本地項目的根目錄下。<\/li>
  • 如果您要在 shell、命令行或其他地方安裝要在 shell 中使用的東西,請全局安裝它,以便它的二進制文件最終出現在您的 PATH 環境變量中。<\/li><\/ul><\/blockquote>

    我目前正在編寫 --- 或者至少正在嘗試編寫 --- 在節點中的真正命令行程序,該程序旨在從 shell 中使用。 因此,根據上述情況,我的依賴項應該安裝為全局模塊。

    我如何在節點中實際使用<\/em>通過 npm 安裝的全局模塊? 當然,調用require()<\/code>不起作用,因為默認情況下 npm 全局模塊目錄( \/usr\/local\/lib\/node_modules<\/code> )不在路徑上。 我可以通過將它顯式添加到程序頂部的路徑來使其工作,但這是一個非常糟糕的解決方案,因為它不可移植——它需要知道 npm 的全局模塊目錄在任何給定系統上的位置。

    只是為了讓生活更加糟糕,我通過 dpkg 安裝了一些全局模塊。 這些已經放在\/usr\/lib\/nodejs<\/code>中,並且它們可以正常工作。 這讓我很困惑,因為如果不應該將全局模塊用於普通應用程序,我不希望它們都在路徑上; 否則我希望他們都在路上,並要求全局模塊在任何地方都可以工作。 有一個但沒有另一個似乎很奇怪。 這里發生了什么?

    更新:我應該指出,這個程序只是一個腳本,頂部有#!\/usr\/bin\/env nodejs<\/code> ; 它不是一個正式的節點模塊,這對於如此微不足道的事情來說太過分了。 由於 Debian 模塊在這樣的腳本中都是必需的,對我來說 npm 的全局模塊也應該是必需的似乎是明智的,但我有一種感覺,這是 Debian 主義......

因此,根據以上所述,我的依賴項應該作為全局模塊安裝。

不完全的。

這意味着您的模塊可以作為全局安裝,因此它的二進制文件可以從shell獲得:

npm install -g your-module
your-module-binary --option etc.

另一方面,它的依賴項應該安裝在第一點之后,駐留在項目中的node_modules目錄中(通常在package.json指定,因此npm可以管理它們)。

但是,全局模塊(通常)不能用於require 它們不遵循node_modules文件夾加載 ,其中npm跟隨本地模塊,並且它們的路徑通常NODE_PATH變量中列出,以便從全局文件夾加載

所以你有關於npm模塊的說明,但是你正在進行本地開發。 以下是一些指導原則。

就源代碼而言,您只需要兩種類型的require語句

var dep = require('somedep')

將此用於您的庫所需的任何核心模塊(如fs )和第三方模塊,通過npm(將它們列在package.json中作為依賴項列出)。 在此處指定不合格的包名稱,節點根據其搜索算法查找模塊。

var mymod = require('./lib/mymod')

使用它來通過相對於當前javascript文件的路徑要求項目中的其他模塊。

這就是處理你的javascript依賴關系所需要做的全部工作。

好的,現在你如何安裝依賴項?

對於本地開發(在項目的源代碼樹中),只需cd進入項目目錄並運行npm install ,它將讀取你的package.json文件並在node_modules子目錄中安裝所需的模塊,所有這些都適合本地開發。

如果您實際上將其作為npm模塊發布,其他用戶(您可以是開發人員和“其他用戶”之一)可以使用npm -g安裝它,如果他們想要訪問他們的項目的二進制實用程序PATH需要包含/usr/lib/nodejs/lib/node_modules ,但在這種情況下, npm -g將同時處理安裝代碼和項目的依賴項。

這是你感到困惑的地方。

因此,根據以上所述,我的依賴項應該作為全局模塊安裝。

您不需要將依賴項顯式安裝為全局變量,只需要您感興趣的頂級模塊,在本例中是您的項目本身。 npm將自動處理依賴項,這是它的主要目的。 您的項目的依賴項不會全局安裝,而是安裝在項目的node_modules子目錄中,該子目錄將全局安裝。

這是目錄和那里的生活:

  • ~/yourproject :源代碼的本地開發
  • ~/yourproject/node_modules :項目在開發期間使用的npm模塊。 通過在~/yourproject運行npm install來創建/填充
  • /usr/lib/nodejs/lib/node_modules :全局安裝的npm模塊(如果將它發布到npm注冊表,最終可能包含你的項目)
  • /usr/lib/nodejs/lib/node_modules/yourproject/node_modules :當您執行npm install -g yourproject時,將在此處安裝項目的依賴npm install -g yourproject

您也可以找到關於管理口譯員和PATH相關的博客文章

此外,Node.js 將在以下 GLOBAL_FOLDERS 列表中搜索:

1:$HOME\/.node_modules 2:$HOME\/.node_libraries 3:$PREFIX\/lib\/node

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM