Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
311 views
in Technique[技术] by (71.8m points)

javascript - Node require absolute path

I have a directory that looks like this:

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

I want my user.js file to require config.json. Right now I'm using require('/config') but this is not working. What am I doing wrong? I'd like to avoid using require('../config').

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The simple answer is that you aren't doing anything wrong. Per a little research, the require function looks for one of:

  • a core module such as fs
  • a relative filepath that you specify in your require call
  • a directory search for the appropriately named module in a node_modules folder somewhere in a parent directory of the file in which the require function is called.

See: http://www.bennadel.com/blog/2169-Where-Does-Node-js-And-Require-Look-For-Modules-.htm And: http://nodejs.org/api/modules.html#loading_from_node_modules_Folders

Both resources above reference the ability to also modify a NODE_PATH environment variable, however this sounds like very bad practice and at a minimum would make your code way less portable. It also probably wouldn't even work for a file like config.json since, though I'd never done it, I'd imagine changing the NODE_PATH variable only changes where require() looks for package.json files corresponding to real modules.

In summary, see: How to make the require in node.js to be always relative to the root folder of the project? as referenced above by Piotr Kowalczuk. Per that post, you have two real options:

  1. Use relative file paths.
  2. Package up your desired resource as a real module with a package.json file and drop it into the node_modules folder.

Finally, just bear in mind that what you are trying to do goes against the grain of the program that you are using. I think this is one case where you will ultimately make your life easier (and your collaborators'!) by going with the grain of Node and using relative file paths as the design intends.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...