【问题标题】:Express module not found when installed with NPM与 NPM 一起安装时找不到 Express 模块
【发布时间】:2011-08-20 15:35:16
【问题描述】:

当我尝试运行 express 创建的app.js 文件时,我收到以下错误:

$ node app.js

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Cannot find module 'express'
    at Function._resolveFilename (module.js:320:11)

当我输入express --version 时,我得到2.3.3 的返回语句。我使用 npm 安装 express。我必须使用这些说明手动制作 npm:

git clone http://github.com/isaacs/npm.git
cd npm
sudo make install

错误是Error: Cannot find module 'express'

安装 npm 和 express 后是否需要做一些事情才能让 express 看到 npm 创建的模块?

  • 我的节点是版本:0.4.6
  • 我的快递是版本:2.3.3
  • 我的 npm 是版本:1.0.6

Express 是全局安装的。我使用-g 标志来安装它。


编辑:当我尝试"node -e require.paths" 我得到:

[ '/home/user/.node_modules',
  '/home/user/.node_libraries',
  '/usr/local/lib/node' ]

所以,node 没有检测到 npm 安装。如何让 node 检测 npm 安装?

【问题讨论】:

  • 你的问题没有说明你是否有 npm >=1.0,但如果你没有,你应该升级。完成后,您应该运行 npm install -g express 以全局安装它——这很重要,因为 express 有自己的可执行文件。
  • 您好,我用我正在使用的 node、express 和 npm 的版本更新了主帖子。
  • 安装 express 时,是用npm install -g express 安装还是只用npm install express 安装?
  • 我添加了 -g 参数。起初我没有,所以我无法检查使用 -g 安装的 express 版本。现在,我可以在 shell 中使用 express 运行命令。我输入:sudo npm install -g express
  • npm > 1.0 不再将全局模块安装到 /usr/local/lib/node。

标签: javascript node.js express npm


【解决方案1】:
  • 安装快递

    npm install -g express

  • 创建一个新应用

    express your_app

  • cd 进入应用目录

    cd your_app

  • 使用 npm 链接解析模块

    npm link express

【讨论】:

  • 我收到了npm ERR! Error: npm link not supported on windows :(
  • 是的,windows 的乐趣 :)
  • @RenatoGama Windows 7 支持通过 mklink 进行符号链接。
  • 这是现在为应用提供全局包的标准方式吗?
  • @JCM 我到底应该链接什么?我尝试将 my_app 文件夹中的链接添加到[pathto_nodejs]\node_modules\express,但仍未找到该模块。
【解决方案2】:

对 require() 使用本地安装,对命令行应用使用全局安装。

如果两者都需要,请使用npm link 命令。

【讨论】:

    【解决方案3】:

    在 Ubuntu 12.04 上,您必须将 export NODE_PATH=/usr/local/lib/node_modules 添加到您的 /.bashrc 才能使用全局安装的模块。

    【讨论】:

    • 这是迄今为止最干净、最优雅的解决方案。这应该适用于大多数 Linux 和 OS X 安装
    • 我的情况是 export NODE_PATH="/usr/lib/node_modules",因为我使用的节点与 Ubuntu 存储库不同。但你在这里是一个很好的(或最好的)anwser。
    • 这为我在 macOS 上修复了它
    【解决方案4】:

    看起来,虽然 npm 已更新为将全局模块安装到 /usr/local/lib/node_modules,但 Node 自己的 require.paths 尚未反映此更改。

    有两种合理的解决方案:

    1. 将以下代码添加到应用程序的顶部:

      require.paths.push('/usr/local/lib/node_modules');
      
      • 专业版:无创,易于添加

      • Con:需要纪律,节点的未来版本限制对require.paths的访问

    2. 以root身份执行:

      ln -s /usr/local/lib/node_modules /usr/local/lib/node
      
      • 专业:相当无创

      • Con:需要 root,修改 linux fs,可能无法在系统更新后继续存在

    【讨论】:

    • 记得先rmdir /usr/local/lib/node 或添加强制标志:ln -sf /usr/local/lib/node_modules /usr/local/lib/node
    • 我同意你的结论,但这里的建议是相同的,更好stackoverflow.com/a/11887453/124486
    【解决方案5】:

    我遇到了同样的问题。不过这对我有用:

    似乎 npm(现在?)将节点模块安装到 /usr/local/lib/node_modules/ 而不是 /usr/local/lib/node/

    我所做的只是将所有内容从 node_modules 复制到 node:sudo cp -r /usr/local/lib/node_modules/* usr/local/lib/node/,现在它似乎对我有用。

    希望这对你有帮助:-)

    【讨论】:

    • 这种方法的问题是,每次使用 npm 安装某些东西时,您都需要将任何新模块从 /usr/local/lib/node_modules 复制到 /usr/local/lib/node。
    • 不,不要这样做!所以......丑陋!
    • 这非常讨厌,但我刚刚创建了一个符号链接ln -s /usr/local/lib/node_modules /usr/local/lib/node。它有点干净。
    【解决方案6】:

    .bashrc.bash_profile 中的 NODE_PATH=/usr/local/lib/node_modules 怎么样?我认为这是真正正确的方法。

    【讨论】:

    • 当您想在项目中测试某些东西时,这是一个很好的技巧,例如我有 marmalade-repo 项目并想从项目库中测试 mongo 交互:NODE_PATH=~/node_modules/marmalade /node_modules ~/noderoot/bin/node 搞定了。
    【解决方案7】:

    设置NODE_PATH=NODE_HOME\node_modules

    我使用的是 Windows 7,它运行良好。

    【讨论】:

      【解决方案8】:

      如果您使用的是 Windows,则可能会发生环境变量 NODE_PATH 未设置,因此当您执行 node fileName.js 时它不会找到库。

      检查控制台上的变量,如果不存在,则创建它。给它NODE_HOME\node_modules 值,其中NODE_HOME 是您的节点安装目录。此路径是 npm install 在下载时放置每个模块的位置。

      【讨论】:

        【解决方案9】:

        require.paths 已删除,请改用NODE_PATH 环境变量。

        【讨论】:

          【解决方案10】:

          看起来最简单的方法是从应用的文件夹中运行npm install。这告诉 npm 连接一切。

          这是express <appname>之后的最后一条指令:

          ...
          dont forget to install dependencies:
          $ cd <appname> && npm install
          

          【讨论】:

            【解决方案11】:

            最后用Linux做的一个好办法是使用命令:sudo apt-get install node-express

            但是使用 express 4 我们必须使用 express-generator 来制作应用程序骨架,使用 'npm install express-generator -g' 安装它,然后运行 ​​'express myapp' 命令。 另见install express

            【讨论】:

              【解决方案12】:

              Mac 用户

              cd /usr/local/lib/node
              sudo ln -s ../node_modules/* ./$1
              

              【讨论】:

                【解决方案13】:

                我安装了gulp,当我在命令行中运行这个gulp 命令时,我收到了gulp: command not found 错误。它似乎在我的本地文件夹/home/YOURUSERNAME/.node/lib/node_modules 中安装了gulp,而不是在全局npm 文件夹中。

                您可以通过运行以下命令检查npm 根文件夹:npm root -g,它返回的是我的个人目录/home/YOURUSERNAME/.node/lib/node_modules,而不是预期的/usr/local/lib/node_modules

                您可以通过运行npm config set prefix /usr/local 命令来解决此问题。

                【讨论】:

                  【解决方案14】:

                  对于使用 mac 计算机的 express 的所有问题:

                  解决办法是:

                  1. chown 给您的用户 .npm 文件夹:

                    sudo chown -R Webmaste /Users/webmaste/.npm/
                    
                  2. 在您的测试文件夹或您的文件夹中:

                    sudo npm install -g express@2.5.8
                    
                  3. 从您的实际位置调用 express:

                    /usr/local/share/npm/bin/express
                    
                  4. sudo cd . &amp;&amp; npm install

                  5. 最后:

                    node app
                    

                  控制台中的最终消息应如下所示:

                  Express server listening on port 3000 in development mode

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-09-17
                    • 1970-01-01
                    • 2019-12-12
                    • 1970-01-01
                    • 2020-01-17
                    • 2013-03-08
                    • 1970-01-01
                    相关资源
                    最近更新 更多