我希望我的文件总是需要我的项目的根,而不是相对于当前的模块。
例如,如果查看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/
发布于 2014-10-02 23:09:57
那下面呢:
var myModule = require.main.require('./path/to/module');
它需要该文件,就好像它是主js文件中所需的一样,所以只要主js文件位于项目的根目录中,它就能很好地工作……这是我很欣赏的。
发布于 2014-06-28 06:23:46
我喜欢为共享代码创建一个新的node_modules
文件夹,然后让node和require做它最擅长的事情。
例如:
- 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会找到它!
node有一个巧妙的算法来解析模块,这在竞争对手的平台中是独一无二的。
如果从/beep/boop/bar.js
执行require('./foo.js')
操作,节点将在/beep/boop/foo.js
中查找./foo.js
。以./
或../
开头的路径始终是调用require()
的文件的本地路径。
但是,如果您需要一个非相对名称,如/beep/boop/foo.js
中的require('xyz')
,节点将按顺序搜索这些路径,在第一个匹配处停止并在未找到任何内容时引发错误:
/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
具有:
{
"name": "xyz",
"version": "1.2.3",
"main": "lib/abc.js"
}
然后,require('xyz')
将返回来自/beep/node_modules/xyz/lib/abc.js
的导出。
如果没有package.json
或"main"
字段,则假设为index.js
:
/beep/node_modules/xyz/index.js
发布于 2014-04-16 19:24:54
https://stackoverflow.com/questions/10860244
复制相似问题