我想要求我的文件总是由我的项目根,而不是相对于当前模块。
例如,如果你看第6行https://github.com/visionmedia/express/blob/2820f2227de0229c5d7f28009aa432f9f3a7b5f9/examples/downloads/app.js你会看到
express = require('../../')
在我看来,这真的很糟糕。想象一下,我想把我所有的例子都放在离根更近的一个层次上。这是不可能的,因为我必须更新30多个示例,并且在每个示例中更新很多次。为此:
express = require('../')
我的解决方案是对基于根的文件夹有一个特例:如果字符串以$开头,那么它是相对于项目的根文件夹的。
谢谢你的帮助
现在我正在使用require。js,它允许您以一种方式编写,并且可以在客户端和服务器上工作。要求js还允许您创建自定义路径。
现在我转到webpack gulp,我使用增强的require来处理服务器端的模块。请参见以下理由:http://hackhat.com/p/110/module-loader-webpack-vs-requirejs-vs-browserify/
我喜欢为共享代码创建一个新的node\u 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
例如,如果你在car/index.js
中,你可以需要('helper')
,节点会找到它!
节点有一个聪明的算法来解决模块,这在竞争对手的平台中是独一无二的。
如果您需要('./foo.js')
来自/beep/boop/bar。js
,节点将查找/福。js
在/beep/boop/foo中。js
。以开头的路径/
或
/
始终位于调用
require()
的文件的本地。
但是,如果您需要非相对名称,如
/beep/boop/foo中的
,节点按顺序搜索这些路径,在第一次匹配时停止,如果未找到任何内容,则引发错误:require('xyz')
。js
/beep/boop/node_modules/xyz
/beep/node_modules/xyz
/node_modules/xyz
对于存在的每个
xyz
目录,节点将首先查找xyz/包。json
查看是否存在“main”
字段。“main”
字段定义了如果您需要()目录路径,应该由哪个文件负责。
例如,如果
/beep/node_modules/xyz
是第一个匹配项,并且/beep/node_modules/xyz/package。json具有:
{
"name": "xyz",
"version": "1.2.3",
"main": "lib/abc.js"
}
然后
/beep/node_modules/xyz/lib/abc.js
的导出将由要求('xyz')
返回。
如果没有
package.json
或没有"main"
字段,则假定index.js
:
/beep/node_modules/xyz/index.js
Browserify手册中有一个非常有趣的部分:
并非应用程序中的所有内容都属于公共npm,在许多情况下,设置私有npm或git repo的开销仍然相当大。下面是一些避免的方法。/.../.../.../.../...相对路径问题。
人们有时反对将特定于应用程序的模块放入node_模块,因为不清楚如何在不同时从npm检入第三方模块的情况下检入内部模块。
答案很简单!如果您有
:。gitignore
忽略节点模块的文件
node_modules
您可以使用添加一个异常
对于每个内部应用程序模块:
node_modules/*
!node_modules/foo
!node_modules/bar
请注意,如果父目录已被忽略,则无法取消子目录。因此,您必须使用
node\u modules/*
技巧忽略node\u modules
中的每个目录,而不是忽略node\u modules
,然后您可以添加异常。
现在,在您的应用程序中的任何地方,您都可以在没有非常大且脆弱的相对路径的情况下
要求('foo')
或要求('bar')
。
如果您有很多模块,并且希望使它们与npm安装的第三方模块更加分离,您可以将它们全部放在
node\u modules
的目录下,例如node\u modules/app
:
node_modules/app/foo
node_modules/app/bar
现在,您可以从应用程序中的任何位置
要求('app/foo')
或要求('app/bar')
。
在您的
. gitignore
中,只需为node_modules/app
添加一个异常:
node_modules/*
!node_modules/app
如果您的应用程序在包中配置了转换。json,您需要创建一个单独的包。json在您的
node\u modules/foo
或node\u modules/app/foo
组件目录中具有自己的转换字段,因为转换不会跨模块边界应用。这将使您的模块对应用程序中的配置更改更加健壮,并且更容易在应用程序之外独立重用包。
如果你在一个应用程序上工作,你可以制作符号链接,而不需要支持窗口,另一个方便的技巧是将一个
lib/
或app/
文件夹符号链接到node_modules
。从项目根,做:
ln -s ../lib node_modules/app
现在,通过执行
require('app/foo.js')
以获取lib/foo,您可以从项目中的任何位置获取
。lib/
中的文件。js
您可能会看到一些地方谈论使用
$NODE\u PATH
环境变量或选项。路径
为节点添加目录,浏览查找模块。
与大多数其他平台不同,与有效使用
节点模块
目录相比,在节点中使用带有$NODE\u path
的shell样式的路径目录数组并不那么有利。
这是因为您的应用程序与运行时环境配置的耦合更紧密,因此有更多的活动部件,只有在正确设置环境时,您的应用程序才能工作。
节点和浏览器都支持,但不鼓励使用
$NODE_PATH
。
那么关于:
javascript prettyprint-override">var myModule = require.main.require('./path/to/module');
它需要这个文件,就好像它是主js文件中需要的一样,所以只要主js文件位于项目的根目录下,它就可以正常工作。。。这是我很感激的。
问题内容: 我想始终通过项目的根目录而不是相对于当前模块来要求文件。 例如,如果您查看https://github.com/visionmedia/express/blob/2820f2227de0229c5d7f28009aa432f9f3a7b5f9/examples/downloads/app.js第6行,您将看到 这真是糟糕的IMO。想象一下,我只想将我所有的例子都更接近一个根。那将是不可
问题内容: 我有两个网址: 如何获得url2的绝对URL? 问题答案: 您应该使用urlparse.urljoin: 使用Python 3(将urlparse重命名为urllib.parse),您可以按以下方式使用它:
问题内容: 和CSS 和有什么不一样?那你什么时候应该使用呢? 问题答案: CSS绝对定位 绝对定位是最容易理解的。您从CSS 属性开始: 这告诉浏览器应将要定位的所有内容从文档的正常流程中删除,并将其放置在页面上的确切位置。它不会影响HTML中它之前或之后的元素在网页上的放置方式,但是除非您重写它,否则 它将 取决于其父级的位置。 如果你想一个元素从文档窗口的顶部10个像素的位置,你会使用偏移与
问题内容: 我想使用abs()对元组进行排序,而无需实际将元组的元素更改为正值。 根据python Wiki(https://wiki.python.org/moin/HowTo/Sorting/#Key_Functions),sorted(list,key =)函数假定使用参数 key 进行排序,而实际上并未更改清单。但是,abs()只需要int(),如果我需要这样做,我还没有想办法将元组变成i
问题内容: 使用进行调试时,如何获取完整的对象? 输出: 但我也想看看财产的内容。 问题答案: 您需要使用: 产出 参见docs。
我有以下情况: 我有两个JVM进程(实际上是两个单独运行的java进程,而不是两个线程)在本地机器上运行。让我们把它们称为进程A和进程B。 我希望他们彼此通信(交换数据)(例如,ProcessA向ProcessB发送消息以执行某些操作)。 现在,我通过编写一个临时文件来解决这个问题,这些过程会定期扫描该文件以获取消息。我认为这个解决方案不太好。 什么是实现我想要的更好的选择?