节点需要绝对path

我有一个如下所示的目录

-- app/ |- models/ |- user.js |- config.json 

我想我的user.js文件需要config.json 。 现在我正在使用require('/config')但这是行不通的。 我究竟做错了什么? 我想避免使用require('../config')

       

网上收集的解决方案 "节点需要绝对path"

简单的答案是你没有做错任何事情。 通过一些研究,require函数查找下列之一:

  • 一个核心模块如fs
  • 您在require调用中指定的相对文件path
  • 目录在调用require函数的文件的父目录中的某处的node_modules文件夹中search相应命名的模块。

请参阅: http : //www.bennadel.com/blog/2169-Where-Does-Node-js-And-Require-Look-For-Modules-.htm和: http : //nodejs.org/api/modules。 HTML#loading_from_node_modules_Folders

上面的两个资源都引用了修改NODE_PATH环境variables的能力,但这听起来像是非常糟糕的做法,至less会使您的代码方式变得不便携。 它也可能甚至不会像config.json这样的文件,因为尽pipe我从来没有这样做过,但我想象,改变NODE_PATHvariables只会改变require()查找与真实模块相对应的package.json文件。

总之,请参阅: 如何使node.js中的require始终相对于项目的根文件夹? 正如上面Piotr Kowalczuk所提到的那样。 每个post,你有两个真正的select:

  1. 使用相对的文件path。
  2. 用一个package.json文件将你想要的资源打包成一个真正的模块,并把它放到node_modules文件夹中。

最后,请记住,您正在尝试做的事与您正在使用的程序有关。 我认为这是一个最终让你的生活变得更简单(和你的协作者!)的一个例子,通过使用Node的粒度,并使用相关的文件path,如devise意图。

看起来像模块加载functionprepends node_modules/参数。 例如,将以下脚本放入/tmp/t.js

 meow = require('meow/meow.js'); 

创build( mkdir/tmp/node_modules/并尝试使用BSD的ktrace (或提供类似function的/tmp/node_modules/来运行它。 节点将尝试打开以下内容:

  • /tmp/node_modules/meow/meow.js
  • /tmp/node_modules/meow/meow.js.js
  • /tmp/node_modules/meow/meow.js.json
  • /tmp/node_modules/meow/meow.js.node
  • /tmp/node_modules/meow/meow.js/package.json
  • /tmp/node_modules/meow/meow.js/index.js
  • /tmp/node_modules/meow/meow.js/index.json
  • /tmp/node_modules/meow/meow.js/index.node

如果脚本旁边没有node_modules/子目录,则根本不会查找与脚本有关的任何地方。