当前位置: 首页 > 知识库问答 >
问题:

NPM全局安装"找不到模块"

轩辕炎彬
2023-03-14

我写了一个模块,不久前发布到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部分将可执行文件添加到bin以及该目录中的node_模块为空有关。不知道如何解决这个问题。

共有3个答案

葛雪松
2023-03-14

默认情况下,节点不会查看/usr/local/lib/node_模块内部以加载全局模块。请参阅中介绍的模块加载http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

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

张唯
2023-03-14

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

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

费学
2023-03-14

对于遇到此问题的任何其他人,我遇到此问题是因为我的npm安装到了一个不在我的节点路径上的位置。

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH
[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)

我可能从源代码安装节点和npm使用配置--prefix=/opt。我不知道为什么这使得他们无法找到安装的模块。现在的修复方法是将NODE_PATH指向正确的目录:

export NODE_PATH=/opt/lib/node_modules

我的要求('promise-io/promise')现在成功。

 类似资料:
  • 问题内容: 我写了一个模块,我刚才将其发布到npm(https://npmjs.org/package/wisp) 因此,可以从命令行进行安装: 但是,当我从命令行运行它时,我不断收到未安装乐观主义者的错误消息: 但是,我在package.json中指定了依赖性: 有谁知道该怎么做才能使它运行?我知道它与bin部分有关,将可执行文件添加到bin中,该目录中的node_modules为空。不知道如何

  • 我不能使用NodeJS中的命令提示符来使用。运行时出现以下错误:

  • 问题内容: 我已经通过命令行在全球范围内安装了两个npm软件包“下载”和“ enigmavirtualbox” : 和 我试图在批处理文件中使用它们,以从我的节点项目中捆绑一个.exe文件。对于这两种命令,这些命令都会产生各自的版本输出,而与当前工作目录无关。 但是,在我的批处理脚本中,找不到命令“下载”和“ enigmavirtualbox”。 运行yield 并查看该文件夹的内部,我可以看到两

  • 我已经通过命令行在全球范围内安装了两个npm软件包“下载”和“enigmavirtualbox”: 和 我正试图在批处理文件中使用它们来捆绑单个文件。我的节点项目中的exe文件。对于这两个命令,命令

  • 问题内容: 我最近在OSX上安装了Node.js和npm模块,我认为设置有问题: 问题答案: 如果要全局安装npm模块,请确保使用new 标志,例如: 从1.0rc开始有关npm模块安装的一般建议(摘自blog.nodejs.org): 如果要安装要在程序中使用的东西,请使用require(’whatever’),然后 将其本地安装 在项目的根目录下。 如果要在外壳程序中安装要使用的东西,在命令行

  • 问题内容: 当我尝试运行express创建的文件时,出现以下错误: 当我键入时,我得到一个return语句。我用npm安装Express。我必须按照以下说明手动创建npm: 错误是。 安装npm和express之后,是否需要做一些事情才能使express看到npm创建的模块? 我的节点是版本:0.4.6 我的快递是版本:2.3.3 我的npm是版本:1.0.6 Express已全局安装。我用标志来