首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让node.js要求绝对?(而不是相对)

如何让node.js要求绝对?(而不是相对)
EN

Stack Overflow用户
提问于 2012-06-02 14:10:59
回答 24查看 200.7K关注 0票数 258

我希望我的文件总是需要我的项目的根,而不是相对于当前的模块。

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

代码语言:javascript
复制
express = require('../../')

这真是太糟糕了。想象一下,我想把我的所有例子都放在离根更近的地方,只有一个级别。这是不可能的,因为我将不得不更新超过30个示例,并在每个示例中多次更新。要这样做:

代码语言:javascript
复制
express = require('../')

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

感谢您的帮助,谢谢

更新2

现在我使用的是require.js,它允许你以一种方式编写代码,并且可以在客户端和服务器端运行。Require.js还允许您创建自定义路径。

更新3

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

EN

回答 24

Stack Overflow用户

发布于 2014-10-02 23:09:57

那下面呢:

代码语言:javascript
复制
var myModule = require.main.require('./path/to/module');

它需要该文件,就好像它是主js文件中所需的一样,所以只要主js文件位于项目的根目录中,它就能很好地工作……这是我很欣赏的。

票数 171
EN

Stack Overflow用户

发布于 2014-06-28 06:23:46

我喜欢为共享代码创建一个新的node_modules文件夹,然后让node和require做它最擅长的事情。

例如:

代码语言:javascript
复制
- node_modules // => these are loaded from your package.json
- app
  - node_modules // => add node-style modules
    - helper.js
  - models
    - user
    - car
- package.json
- .gitignore

例如,如果你在node中,你可以require('helper'),node会找到它!

How node_modules Work

node有一个巧妙的算法来解析模块,这在竞争对手的平台中是独一无二的。

如果从/beep/boop/bar.js执行require('./foo.js')操作,节点将在/beep/boop/foo.js中查找./foo.js。以./../开头的路径始终是调用require()的文件的本地路径。

但是,如果您需要一个非相对名称,如/beep/boop/foo.js中的require('xyz'),节点将按顺序搜索这些路径,在第一个匹配处停止并在未找到任何内容时引发错误:

代码语言:javascript
复制
/beep/boop/node_modules/xyz
/beep/node_modules/xyz
/node_modules/xyz

对于存在的每个xyz目录,节点将首先查找xyz/package.json,以查看是否存在"main"字段。"main"字段定义当您require()目录路径时哪个文件应该负责。

例如,如果/beep/node_modules/xyz是第一个匹配项,而/beep/node_modules/xyz/package.json具有:

代码语言:javascript
复制
{
  "name": "xyz",
  "version": "1.2.3",
  "main": "lib/abc.js"
}

然后,require('xyz')将返回来自/beep/node_modules/xyz/lib/abc.js的导出。

如果没有package.json"main"字段,则假设为index.js

代码语言:javascript
复制
/beep/node_modules/xyz/index.js
票数 88
EN

Stack Overflow用户

发布于 2014-04-16 19:24:54

看看node-rfr吧。

它就像这样简单:

代码语言:javascript
复制
var rfr = require('rfr');
var myModule = rfr('projectSubDir/myModule');
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10860244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档