簡體   English   中英

如何在 Node 中導入全局模塊? 我收到“錯誤:找不到模塊<module> “?</module>

[英]How do I import global modules in Node? I get "Error: Cannot find module <module>"?

我正在嘗試在 Mac OSX Lion 上設置 Node。 一切似乎都正常,但我似乎無法從我的全局模塊文件夾中導入任何模塊。 我得到錯誤,

Error: Cannot find module <module>

如果我運行這個: node -e require.paths ,我得到的響應是:

[ '/usr/local/lib/node_modules',
  '/Users/Me/.node_modules',
  '/Users/Me/.node_libraries',
  '/usr/local/Cellar/node/0.4.12/lib/node' ]

這是正確的,我的模塊確實安裝在 /usr/local/lib/node_modules 中。 然而,當我嘗試運行腳本時,我得到了這個:

Error: Cannot find module 'socket.io'
    at Function._resolveFilename (module.js:326:11)
    at Function._load (module.js:271:25)
    at require (module.js:355:19)
    at Object.<anonymous> (/Users/Me/node/server.js:2:10)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at Array.<anonymous> (module.js:430:10)
    at EventEmitter._tickCallback (node.js:126:26)

My.bash_profile 看起來像這樣:

export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"

非常感謝一些幫助,我不知道為什么我不能導入任何庫。

如果您使用的是 npm >=1.0,則可以使用npm link <global-package>創建指向已全局安裝的包的本地鏈接。 警告:操作系統必須支持符號鏈接。

然而,這並非沒有問題。

npm link 是一個開發工具。 在本地開發箱上管理包非常棒 但是使用 npm link 進行部署基本上是在問問題,因為它可以在不知不覺中更新內容變得非常容易。

作為替代方案,您可以在本地和全局安裝軟件包。

有關其他信息,請參閱

Node.js 使用環境變量NODE_PATH來允許指定要包含在模塊搜索路徑中的其他目錄。 您可以使用npm本身通過npm root -g命令告訴您全局模塊的存儲位置。 因此,將這兩者放在一起,您可以使用以下命令(在 Linux-ish 上)確保搜索路徑中包含全局模塊

export NODE_PATH=$(npm root --quiet -g)

您可以使用 npm link 在您的項目文件夾中創建一個指向全局包的符號鏈接。

例子:

$ npm install -g express
$ cd [local path]/project
$ npm link express

它所做的只是創建一個本地 node_modules 文件夾,然后創建一個符號鏈接 express -> [global directory]/node_modules/express 然后可以通過require('express')解析

全局安裝任何軟件包,如下所示:

$ npm install -g replace  // replace is one of the node module.

因為這個替換模塊是全局安裝的,所以如果你看到你的節點模塊文件夾,你就不會在那里看到替換模塊,所以你不能使用 require('replace') 使用這個包。

因為使用 require 您只能使用節點模塊文件夾中存在的本地模塊。

現在要使用全局模塊,您應該使用以下命令將其與節點模塊路徑鏈接。

$ npm link replace

現在返回並查看您的節點模塊文件夾,您現在可以在那里看到替換模塊,並且可以在應用程序中將其與 require('replace') 一起使用,因為它與您的本地節點模塊鏈接。

請讓我知道是否需要進一步澄清。

您可以將 require 與全局模塊目錄的路徑一起用作參數。

require('/path/to/global/node_modules/the_module');

在我的 mac 上,我使用這個:

require('/usr/local/lib/node_modules/the_module');

如何找到你的全局模塊在哪里? --> npm 在哪里安裝包?

將環境變量 NODE_PATH 設置為指向您的全局node_modules文件夾。

在 Windows 7 或更高版本中,路徑類似於%AppData%\\npm\\node_modules而在 UNIX 中可能類似於/home/sg/.npm_global/lib/node_modules/但它取決於用戶配置。

命令npm config get prefix可以幫助找出正確的路徑。

在 UNIX 系統中,您可以使用以下命令完成它:

export NODE_PATH=`npm config get prefix`/lib/node_modules/

簡單的答案是在 npm 全局根目錄中運行節點。

cd $( npm root -g ) && node

我正在使用 Docker。 我正在嘗試創建一個安裝了所有節點依賴項的 docker 映像,但可以在容器運行時使用我的本地應用程序目錄(不會用 node_modules 目錄或鏈接污染它)。 這會導致在這種情況下出現問題。 我的解決方法是從模塊所在的確切路徑中要求,例如 require('/usr/local/lib/node_modules/socket.io')

如果你在 windows cmd,你可以通過 FOR /f "tokens=* delims=" %A in ('npm root --quiet -g') do set "NODE_PATH=%A" or FOR /f "tokens =* delims=" %%A in ('npm root --quiet -g') 在批處理文件中設置“NODE_PATH=%%A”。

require.paths已棄用。

轉到您的項目文件夾並鍵入

npm install socket.io

應該將它安裝在本地 ./node_modules 文件夾中,節點將在該文件夾中查找它。

我的東西是這樣的:

cd ~/Sites/
mkdir sweetnodeproject
cd sweetnodeproject
npm install socket.io

創建一個 app.js 文件

// app.js
var socket = require('socket.io')

現在運行我的應用程序

node app.js

確保您使用的是npm >= 1.0node >= 4.0

暫無
暫無

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

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