232

我写了一个模块,我刚才发布到 npm (https://npmjs.org/package/wisp)

所以它可以从命令行很好地安装:

$ npm i -g wisp

但是,当我从命令行运行它时,我不断收到未安装 optimist 的错误:

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

但是,我在 package.json 中指定了依赖项:

{
  "name": "wisp",
  "author": "Brendan Scarvell <bscarvell@gmail.com>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

有谁知道该怎么做才能让它运行?我知道这与将可执行文件添加到 bin 并且该目录中的 node_modules 为空的 bin 部分有关。不知道如何解决这个问题。

4

19 回答 19

405

对于遇到此问题的其他任何人,由于我npm安装到不在我的NODE_PATH.

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

我的 NODE_PATH 是空的,运行npm install --global --verbose promised-io显示它正在安装到/opt/lib/node_modules/promised-io

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

我的脚本失败require('promised-io/promise')

[neek@uberneek project]$ node buildscripts/stringsmerge.js 

module.js:340
    throw err;
          ^
Error: Cannot find module 'promised-io/promise'
    at Function.Module._resolveFilename (module.js:338:15)

我可能使用configure --prefix=/opt. 我不知道为什么这使他们无法找到已安装的模块。现在的解决方法是将 NODE_PATH 指向正​​确的目录:

export NODE_PATH=/opt/lib/node_modules

我的require('promised-io/promise')现在成功了。

于 2013-01-25T05:25:40.963 回答
44

将此添加到 prog(mac) 的开头:

module.paths.push('/usr/local/lib/node_modules');

于 2014-10-15T11:14:28.607 回答
16

默认情况下,node 不会在 /usr/local/lib/node_module 内部查找来加载全局模块。请参阅http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders中解释的模块加载

因此,要么您必须 1) 将 /usr/local/lib/node_module 添加到 NODE_PATH 并将其导出,要么 2) 将已安装的节点模块复制到 /usr/local/lib/node 。(如加载模块节点的链接中所述,将在此路径中搜索并将工作)

于 2013-11-26T18:15:12.017 回答
13

以下通用修复适用于任何模块。例如与request-promise.

代替

npm install request-promise --global

npm install request-promise --cli

工作(来源),也为globalsinherits

另外,尝试设置环境变量

NODE_PATH=%AppData%\npm\node_modules
于 2017-09-22T07:07:13.700 回答
11

对于一些(像我一样)没有其他工作的人,试试这个:

brew cleanup
brew link node
brew uninstall node
brew install node

希望它可以帮助某人:)

于 2015-12-14T17:15:13.333 回答
8

我得到了“乐观主义者”模块错误,我只是做了“npm install”来解决它。越过了那个错误。

https://github.com/mbloch/mapshaper/issues/12

于 2014-11-14T18:18:51.387 回答
3

在 Windows 上,如果你刚刚进行了全新安装并且得到了这个,你需要在 \AppData\Roaming 中清除你的 npm 缓存

于 2016-07-29T03:37:57.890 回答
3

$ vim /etc/profile.d/nodejs.sh

export NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
于 2016-10-05T16:38:23.600 回答
2

我以简单的方式做到了这一点......

  1. 从控制面板卸载节点 [Windows 7]
  2. 再次安装节点
  3. 安装量角器 npm install --global --verbose protractor
    更新网络驱动程序管理器。

对我来说很好。

希望这可以帮助你....

于 2017-03-25T02:53:50.003 回答
2

我刚刚遇到了这个axios模块的问题。然后我尝试了这个:运行rm -rf node_modulesyarn. 它有效。

于 2019-07-30T02:45:08.333 回答
2

对于 Mac 用户,最好使用手动安装:

为了最大限度地减少权限错误的可能性,您可以将 npm 配置为使用不同的目录。在此示例中,它将是您的主文件夹中的隐藏目录。

  1. 在开始之前备份您的计算机。

  2. 为全局安装创建一个目录:

    mkdir ~/.npm-global

  3. 配置 npm 以使用新的目录路径:

    npm 配置设置前缀 '~/.npm-global'

  4. 打开或创建一个 ~/.profile 文件并添加以下行:

    导出 PATH=~/.npm-global/bin:$PATH

  5. 返回命令行,更新系统变量:

    源〜/ .profile

  6. 测试:在不使用 sudo 的情况下全局下载一个包。

    npm install -g jshint

除了步骤 2-4,您可以使用相应的 ENV 变量(例如,如果您不想修改 ~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global

参考:https ://docs.npmjs.com/getting-started/fixing-npm-permissions

于 2018-06-14T07:26:00.580 回答
2

我得到了这个错误Error: Cannot find module 'number-is-nan',而模块实际上存在。这是由于 Node.js 安装错误/不完整造成的。

对于 Windows ,正如其他答案所建议的那样,您需要一个干净的节点安装

  • 卸载 Node.js
  • 删除这两个文件夹npmnpm_cacheC:\Users\user\AppData\Roaming
  • 重新启动 Windows 并安装 Node.js
  • 运行npm init或(npm init --yes默认配置
  • NODE_PATH. 此路径是您的软件包的安装位置。大概是这样的NODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
  • 启动一个新的 cmd 控制台,npm应该可以正常工作

笔记 :

在重新安装 Node.js 之前尝试最后几点,它可以节省您一些时间并避免重新安装所有包。

于 2018-05-11T11:45:00.683 回答
2

对于 Windows,从Nodejs 找不到 Windows 上已安装的模块?对我有用的是运行 npm 链接,如

npm link wisp
于 2016-08-07T04:05:56.170 回答
1

在运行Ubunturoot. 然后创建了一个新用户,并使用useradd -m myuser并将所有内容nvm、、node包)安装为myuser. 现在它工作正常。

于 2015-08-11T22:10:34.077 回答
1

在我的情况下,两者nodenpm在同一路径中(/usr/bin)。NODE_PATH是空的,因此将npm全局模块放置/usr/lib/node_modulesrequire(...)成功找到它们的位置。唯一的例外是npmnodejs 包附带的模块。由于我使用的是 64 位系统,因此将其放入/usr/lib64/node_modules. 这不是 require(...) 搜索空NODE_PATH且节点从 开始的地方/usr/bin。所以我有两个选择:

  • 链接/usr/lib64/node_modules/npm/usr/lib/node_modules/npm
  • 将模块/usr/lib/node_modules/*移至/usr/lib64/node_modules/和设置NODE_PATH=/usr/lib64/node_modules

两者都有效。我正在使用 OpenSUSE 42.1 和更新存储库中的 nodejs 包。版本是 4.4.5。

于 2016-09-27T13:27:20.777 回答
0

我遇到了与 OP 相同的错误,但通过挖掘我可以看到的日志sh: node: command not found

事实证明 /usr/bin/node 程序(符号链接)不再随apt install nodejs. 一旦符号链接/usr/bin/node' tonodejs ,npm install -g @angular/cli` 成功。

在 debian 上安装它的正确方法是apt install nodejs-legacy.

于 2017-11-12T23:17:53.193 回答
0

我必须将 C:\Users\{Username}\AppData\Roaming\npm 添加到我的环境变量中,然后我才能安装东西。

于 2018-07-19T17:25:05.790 回答
0

面临同样的问题,并通过在我的 zshrc 中添加以下行来解决它。根据您的 shell,您可以尝试在您的 rc 文件中添加 bash 和 zsh - bashrc/zshrc 文件存在于您的主位置。

export NODE_PATH="/usr/local/lib/node_modules"

要直接添加 zshrc 文件,请运行此命令

echo 'export NODE_PATH="/usr/local/lib/node_modules"' >> ~/.zshrc
于 2021-10-28T07:22:47.573 回答
0

高山/集装箱化

如其他地方所述,解决方案是烘焙到您的图像中,

NODE_PATH=/usr/local/lib/node_modules/

我还用apk在上游打开了一个问题,所以设置好了npm

于 2021-12-29T01:26:58.093 回答