我想要求我的文件总是通过我的项目的根,而不是相对于当前模块。

例如,如果查看https://github.com/visionmedia/express/blob/2820f2227de0229c5d7f28009aa432f9f3a7b5f9/examples/downloads/app.js第6行,您将看到

express = require('../../')

在我看来,这真的很糟糕。假设我想让我所有的例子都只靠近根结点一层。这是不可能的,因为我必须更新超过30个例子,并且在每个例子中更新很多次。:

express = require('../')

我的解决方案是有一个基于根的特殊情况:如果字符串以$开头,那么它相对于项目的根文件夹。

任何帮助都是感激的,谢谢

更新2

现在我使用require.js,它允许你以一种方式编写,在客户端和服务器上都可以工作。Require.js还允许你创建自定义路径。

更新3

现在我转移到webpack + gulp,我使用enhanced-require来处理服务器端模块。看这里的基本原理:http://hackhat.com/p/110/module-loader-webpack-vs-requirejs-vs-browserify/


当前回答

尝试使用asapp:

NPM安装——保存为app

https://www.npmjs.com/package/asapp

var { controller, helper, middleware, route, schema, model, APP, ROOT } = require('asapp')

Controller ('home')改为require('../../controllers/home)

其他回答

一些答案说,最好的方法是将代码作为包添加到node_module,我同意,这可能是最好的方法,失去../../../ in require,但实际上没有一个给出这样做的方法。

从2.0.0版本开始,你可以从本地文件安装一个包,这意味着你可以在根目录下创建一个文件夹,里面有你想要的所有包,

-modules
 --foo
 --bar 
-app.js
-package.json

所以在包装上。Json,你可以添加模块(或foo和bar)作为一个包,而不需要发布或使用外部服务器,像这样:

{
  "name": "baz",
  "dependencies": {
    "bar": "file: ./modules/bar",
    "foo": "file: ./modules/foo"
  }
}

之后你执行npm install,你可以使用var foo = require("foo")访问代码,就像你对所有其他包所做的一样。

更多信息可以在这里找到:

https://docs.npmjs.com/files/package.json#local-paths

下面是如何创建一个包:

https://docs.npmjs.com/getting-started/creating-node-modules

假设你的项目根目录是当前的工作目录,这应该是有效的:

// require built-in path module
path = require('path');

// require file relative to current working directory
config = require( path.resolve('.','config.js') );

这里已经有很多好答案了。这只是说明这是一个普遍的问题,没有明确的最佳解决方案。当然最好是在Node.js中提供本地支持。以下是我目前使用的:

const r  = p => require (process.cwd() + p);
let see  = r ('/Subs/SubA/someFile.js' );
let see2 = r ('/Subs/SubB/someFile2.js');
...

我喜欢这个解决方案,因为require部分变得更短,不需要键入'require'很多次。绝对路径的主要好处是,您可以将它们从一个文件复制到另一个文件,而不必像使用相对路径那样对它们进行调整。因此,复制额外的一行箭头函数'r()'也不会有太多额外的工作。为了完成这个非常简单的任务,不需要导入额外的npm依赖项。

这是我六个多月来的实际做法。我在项目中使用一个名为node_modules的文件夹作为我的根文件夹,这样它将始终从我调用绝对require的任何地方查找该文件夹:

node_modules myProject index.js我可以require("myProject/someFolder/hey.js")而不是require("./someFolder/hey.js") 包含hey.js的someFolder

当你被嵌套到文件夹中时,这更有用,如果以绝对方式设置,更改文件位置的工作要少得多。我在整个应用程序中只使用了2个相对要求。

同样的问题我遇到过很多次。这可以通过使用basetag npm包来解决。它本身不一定是必需的,只是在node_modules中创建到基本路径的符号链接时安装。

const localFile = require('$/local/file')
// instead of
const localFile = require('../../local/file')

使用$/…Prefix将始终引用相对于应用程序根目录的文件。

来源:我如何创建basetag来解决这个问题