首页 文章

NPM全局安装“找不到模块”

提问于
浏览
172

我写了一个模块,我刚刚发布到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_modules为空 . 不知道如何解决这个问题 .

16 回答

  • 10

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

    brew cleanup
    brew link node
    brew uninstall node
    brew install node
    

    希望它可以帮助别人:)

  • 1

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

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

  • 1

    对于Windows,从Nodejs cannot find installed module on Windows?起,对我来说有效的是运行npm链接

    npm link wisp
    
  • 1

    在Windows上,如果你只是进行了全新安装而你得到了这个,你需要在\ AppData \ Roaming中吹掉你的npm缓存

  • 30

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

    NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
    export NODE_PATH="$NODE_PATH"
    
  • 1

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

    要最小化权限错误的可能性,可以将npm配置为使用其他目录 . 在此示例中,它将是主文件夹中的隐藏目录 . 在开始之前备份计算机 . 为全局安装创建一个目录:mkdir~ / .npm-global配置npm以使用新的目录路径:npm config set prefix'〜/ .npm-global'打开或创建一个〜/ .profile文件并添加以下行:export PATH =〜/ .npm-global / bin:$ PATH返回命令行,更新系统变量:source~ / .profile测试:全局下载包而不使用sudo . npm install -g jshint而不是步骤2-4,你可以使用相应的ENV变量(例如,如果你不想修改〜/ .profile):NPM_CONFIG_PREFIX =〜/ .npm-global

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

  • 0

    在我的情况下, nodenpm 在同一路径( /usr/bin ) . NODE_PATH 为空,因此 npm 将全局模块放入 /usr/lib/node_modulesrequire(...) 成功找到它们 . 唯一的例外是 npm 模块,它随nodejs包一起提供 . 由于我使用的是64位系统,因此它被放入 /usr/lib64/node_modules . 如果空 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 .

  • 320

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

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

  • 3

    我有 request-promise 这个问题 . 在我的情况下,替换:

    npm install request-promise --global
    

    npm install request-promise --cli
    

    工作(source

    另外,尝试设置环境变量

    NODE_PATH=%AppData%\npm\node_modules
    
  • 0

    我有与OP相同的错误,但是通过日志我可以看到 sh: node: command not found .

    事实证明,/ usr / bin / node程序(符号链接)不再与 apt install nodejs 一起安装 . 符号链接 /usr/bin/node' to nodejs , npm install -g @ angular / cli`成功 .

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

  • 3

    我这样做的方式很简单......

    • 从控制面板取消安装节点[Windows 7]

    • 再次安装节点

    • 安装量角器 npm install --global --verbose protractor
      更新Web驱动程序管理器

    对我来说很好 .

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

  • 13

    我必须将C:\ Users \ \ AppData \ Roaming \ npm添加到我的env变量中然后我可以安装东西 .

  • 7

    root 下运行 Ubuntu 的其中一个测试服务器上遇到同样的问题 . 然后使用 useradd -m myuserinstalled everythingnvmnode ,包)创建了一个新用户作为 myuser . 现在它工作正常 .

  • 0

    我收到此错误 Error: Cannot find module 'number-is-nan' ,而模块实际存在 . 这是由于Node.js安装错误/不完整 .

    对于Windows,正如其他答案所暗示的那样,你需要一个干净的Node installation

    • 卸载Node.js.

    • 删除 C:\Users\user\AppData\Roaming 中的两个文件夹 npmnpm_cache

    • 重新启动Windows并安装Node.js.

    • 运行 npm init 或( npm init --yes 代表default config

    • NODE_PATH 设置Windows环境变量 . 此路径是安装软件包的位置 . 它可能像 NODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules

    • 启动一个新的cmd控制台, npm 应该可以正常工作

    Note :

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

  • 0

    对于遇到此问题的其他人,我遇到了这个问题,因为我的 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和npm . 我不知道为什么这使他们无法找到已安装的模块 . 现在的修复是将NODE_PATH指向正确的目录:

    export NODE_PATH=/opt/lib/node_modules
    

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

  • 1

    默认情况下,节点不会查看/ 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 . (正如加载模块节点的链接中所解释的那样,将在此路径中搜索并将起作用)

相关问题