-
Notifications
You must be signed in to change notification settings - Fork 9
浅析 NodeJs 的几种文件路径 #48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
关于 |
好吧,感谢填坑。 |
赞 |
其实原因很简单,require的路径必须是相对于当前执行文件的,否则你引用的node_module,它的require路径肯定不能够正确识别了呀。 |
感谢填坑! |
有些地方的路径楼主写错了,请更正一下 |
感谢躺坑 |
写node的新人,这两天遇到了路径问题,多谢。 |
此坑早已踩!!! |
在坑里站了一晚上,刚找到原因顺藤摸瓜看到了这篇分析,我泪流满面 |
好文,谢谢博主 |
赞。 |
好 |
👍 |
呜呜菜鸟表示看不大懂 |
thank you! |
文件结构是不是model应该改成model.js啊, 跟输出的文件路径不匹配呢 |
对于文件地址的凭借最好使用 |
model写成model.js了你... |
感谢填坑! |
谢谢 |
/Users/guo/Sites/learn/app/model.js =》应该是 /Users/guo/Sites/learn/app/model |
一个很有营养的坑 :) |
只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下: // 当前目录下 应该是: |
谢谢分享 |
建议看下@sevencai的建议, 修改下代码吧 |
@liuyanshi @sevencai 已修正,谢谢反馈。 |
搜问题竟然搜到了果大的文章,厉害! |
@kokokele |
回头试试再回来赞 |
process.cwd()也比较好理解,表示的是node进程当前所在的路径,因为只有你在一个目录下执行 |
When using |
谢谢,一步一步爬坑中.......... |
thanks. let us climb out of the pits. 么么哒 |
謝謝 |
多谢填坑 |
很好的文章,收获多,赞一下。已保存。 |
thanks |
1 similar comment
thanks |
nice 刚刚踩这个坑 |
写了两年才偷懒踩坑。。。以前还在骂pysb。。。 |
一直以为__dirname是执行node命令的路径 感谢 |
你好 文章可以授权"深圳湾码农"公众号转载吗?会注明作者和原文链接 |
感谢 😃 |
Mark |
Uh oh!
There was an error while loading. Please reload this page.
一、挖坑 & 掉坑:
缘起一段这样的代码:
本地运行时一切 OK,线上部署时却死活找不到
./docs/use.md
这个文件,后来才发现是因为线上启动应用时不是从当前目录启动了,不过为什么启动脚本的位置也会影响这个路径呢,且往下看。二、填坑:
Node 中的文件路径大概有
__dirname
,__filename
,process.cwd()
,./
或者../
,前三个都是绝对路径,为了便于比较,./
和../
我们通过path.resolve('./')
来转换为绝对路径。先看一个简单的栗子:
假如我们有这样的文件结构:
在 task.js 里编写如下的代码:
在
model
目录下运行node task.js
得到的输出是:然后在
app
目录下运行node model/task.js
,得到的输出是:那么,不好意思不是问题来了~T_T,我们可以得出一些肤浅的结论了:
我明明记得在
require('../lib/common')
里一直都是各种相对路径写,也没见报什么错啊,我们还在再来个栗子吧,还是上面的结构,'model/task.js' 里的代码改成:在 model 目录下运行
node task.js
,一切 Ok,没有报错。然后在 app 目录下运行node model/task.js
,然后很果断滴报错了:那么这下问题真的都是来了,按照上面的理论,在 app 下运行时,
../lib/common.js
会被转成/Users/guo/Sites/learn/lib/common.js
,这个路径显然是不存在的,但是从运行结果可以看出require('../lib/common')
是 OK 的,只是 readFile 时报错了。那么关于
./
正确的结论是:在
require()
中使用是跟__dirname
的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟process.cwd()
效果相同,是相对于启动脚本所在目录的路径。三、总结:
只有在
require()
时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:四、参考链接:
以上:smile:。
The text was updated successfully, but these errors were encountered: