[英]Why do I keep getting throwing this error? node : internal /modules /cjs/ loader 944 Throw Err ^ (Cannot find 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.0
和node >= 4.0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.