use*_*880 22 javascript directory node.js express
我有一个如下所示的目录:
-- app/
|- models/
|- user.js
|- config.json
Run Code Online (Sandbox Code Playgroud)
我想要我的user.js文件config.json.现在我正在使用,require('/config')但这不起作用.我究竟做错了什么?我想避免使用require('../config').
Owe*_*wen 21
简单的答案是你没有做错任何事.通过一些研究,require函数寻找以下之一:
请参阅: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环境变量的能力,但这听起来非常糟糕,至少会使你的代码变得不那么便携.它甚至可能不适用于像config.json这样的文件,因为虽然我从来没有这样做过,但我想更改NODE_PATH变量只会在require()查找与真实模块对应的package.json文件时发生变化.
总结一下,请参阅:如何使node.js中的require始终相对于项目的根文件夹?如上所述Piotr Kowalczuk.根据该帖子,您有两个真正的选择:
最后,请记住,您尝试做的事情违背了您正在使用的程序.我认为这是一个案例,你最终会通过使用Node的粒度和使用相对文件路径来使你的生活更轻松(和你的合作者!).
sul*_*tan 11
我找不到比编写自己的模块更好的解决方案.
所以,我喜欢干净的代码,里面这么丑陋的道路require正在杀了我.我找到了许多解决方案如何解决它,但我喜欢的是在Linux系统下完美但不适用于Windows.然后我决定解决它.
在一些项目中测试后,我决定将其作为开源.
const user = require('../../../database/user'); // what you have
// OR
const user = require('$db/user'); // no matter how deep you are
const product = require('/database/product'); // alias or pathing from root directory
Run Code Online (Sandbox Code Playgroud)
使用它的三个简单步骤.
安装包: npm install sexy-require --save
require('sexy-require')在主应用程序文件的顶部包含一次.
require('sexy-require');
const routers = require('/routers');
const api = require('$api');
...
Run Code Online (Sandbox Code Playgroud)可选步骤.路径配置可以在.paths项目根目录下的文件中定义.
$db = /server/database
$api-v1 = /server/api/legacy
$api-v2 = /server/api/v2
Run Code Online (Sandbox Code Playgroud)在项目的任何位置,您都可以获得定义的快捷方式路径
const path = require(`sexy-require`);
console.log(path.$db); // -> '/full/path/to/app/server/database'
Run Code Online (Sandbox Code Playgroud)