【问题标题】:node.js modules pathnode.js 模块路径
【发布时间】:2012-11-08 02:02:16
【问题描述】:

我意识到,当我全局安装 node.js 模块(带有 -g 标志)时,除非我编写了整个路径,否则节点无法使用该模块。

我的意思是,如果模块已全局安装,这将不起作用:

cheerio = require('cheerio'),

我必须这样写:

cheerio = require('/usr/lib/node_modules/cheerio'),

我如何告诉节点它必须在正确的路径中寻找模块?

谢谢。

【问题讨论】:

  • 对于节点,我们大多数人(或某些人)通过将模块作为依赖项添加到 package.json 中来在项目文件夹中安装模块。因此,在部署期间,您只需上传源代码并为服务器中的模块执行 npm install 或部署整个项目文件夹。优点是不会依赖于照顾不同的项目。我将为php java而不是node集中lib。

标签: node.js npm


【解决方案1】:

更好的方法是在你的 js 文件中设置模块路径。

在我的例子中,我在 /usr/etc 运行 npm install mysql,mysql 将显示在“/usr/etc/node_modules”中,所以这是正确的路径:

var mysql = require('/usr/etc/node_modules/mysql');

【讨论】:

  • 不过,这是一个真的奇怪的地方。
  • 不推荐这种方法。移动东西需要调整每个 js 文件。
【解决方案2】:

对于那些使用 Windows 平台的用户,请将其添加到系统变量中的 PATH 中:

C:\Users\<username>\AppData\Roaming\npm

PS:在 Windows 8.1 上测试

【讨论】:

  • 您必须在 Users\ 和 \AppData 之间包含“用户名”。此配置应包含在您的用户系统变量中。然后您需要关闭会话并重新启动以查看控制台中的更改
  • 在我的例子中,运行 Windows 8.1,它是 'npm-cache' 而不仅仅是 'npm'。
  • @edrian 在原始答案中实际上有一个占位符,但是由于未将其标记为代码,因此删除了“标签”。现在已经修复了
  • 但是 AppData\Roaming 下的 npm 文件夹是空的?它是如何工作的?
  • 快捷方式 %appdata% 指向当前用户的 AppData\Roaming 目录(至少在 Windows 7 中),所以你可以使用 %appdata%\npm
【解决方案3】:

对于安装了 ZSH 的人:

echo 'export NODE_PATH="'$(npm root -g)'"' &gt;&gt; ~/.zshrc &amp;&amp; . ~/.zshrc

【讨论】:

    【解决方案4】:

    一般来说,我建议让 npm 为您提供路径并按上述方式设置:

    $ echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.bash_profile && . ~/.bash_profile
    

    【讨论】:

    • 我猜如果你的loglevel=info (或任何冗长的东西)在你的npmrc 配置中是行不通的,所以请注意这一点。将 $(npm root -g) 更改为 $(npm root -g 2&gt;/dev/null) 可能会更好,但这仍然不是通用的,因为只有某些 shell 支持 STDERR 重定向的语法。
    • -bash: /Users/abc/.nvm/nvm.shexport: No such file or directory
    • npm root 返回当前项目的模块目录 当前目录是节点项目,否则如果没有或如果添加了-g 标志,则显示全局模块
    【解决方案5】:

    您可以将以下内容添加到 ~/.bash_profile:

    export NODE_PATH=/usr/lib/node_modules:$NODE_PATH
    

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 1970-01-01
      • 2012-10-30
      • 2011-07-12
      • 2017-02-23
      • 2023-04-07
      • 1970-01-01
      • 2018-03-30
      • 2011-07-10
      相关资源
      最近更新 更多