node获取图片路径_那些年在webstorm中使用node的坑...

49d1d837715601e0169d4af0f8e242bd.png

webstorm中使用node内置模块path.resolve()方法获取绝对路径错误分析及解决方案问题已解决,更新自:2019年5月9日

问题描述:
在使用webstorm测试node的path内置模块时,在JS模块中调用path.resolve()方法,无法获得该JS模块的绝对路径(不含模块名称:也就是模块所在文件夹的绝对路径)【下同】

问题现象及分析解决步骤:

第一步: 将pathTest文件夹作为项目用webstorm打开,如下图:

5a223d37ae50f315ae21af0804571236.png

第二步: 用webstorm快捷键Ctrl+shift+F10执行b.js模块,测试path.resolve()方法,获取绝对路径错误!如下图:

f7061302a0f1a59e64e5af74905df539.png


如上图,在测试时发现,获取的绝对路径只能获取到项目目录pathTest的路径,无法获取到pathTest目录下的“c文件”路径。

第三步:调试

试着把aa.js模块建立在pathTest项目一级目录下,用webstorm快捷键Ctrl+shift+F10执行,测试成功!如下图:

40bf035813b668e1d9647ca6b256055c.png

第四步:对比分析原因,初得结论

是JS模块所在项目的“路径深度”,引起了path.resolve()方法获取绝对路径的错误。

初步结论:

path.resolve()方法获取绝对路径,JS模块在项目的一级目录下,可以正确获取;JS模块在二级目录及更深目录以下,则获取绝对路径错误。

所以要把JS模块创建在项目的一级目录下,才能使用path.resolve()方法正确获取绝对路径。

第五步:验证初步结论
新建更深层目录"d文件夹",在其中测试d.js,用webstorm快捷键Ctrl+shift+F10执行,获取绝对路径的情况:路径错误 ===>初步结论正确。如下图:

ba8ac702b1282f5c17509cc74e2527ea.png

疑虑:

难道以后我所有的JS模块都必须创建在项目的一级目录下吗?

不现实!!!

而且实际项目中,JS模块的创建位置从来都不是限定死的,一定还有什么地方我出错了!

第六步:拓展思维,打破困境

我在网上疯狂搜索,但是大家好像都没有遇到过这个问题,他们获取的绝对路径都是正确的,没有出现我这么个奇葩现象。

但是关于在webstorm中使用绝对路径出错的一篇帖子给了我一点启发,这篇文章地址在这《关于HTML5中video标签在webstorm中使用绝对路径不能播放视频的解析》【作者:天道十二】。

其中涉及到了一些服务器环境下和webstorm下获取路径存在差异的概念。

再联想到,我使用的是node的path内置模块,那么我是否应该基于node环境下才能发挥path内置模块的终极能力(获取到正确的绝对路径)?要基于node环境,那么我是不是应该在执行JS模块时,用node命令来执行?

灵感稍纵即逝,马上行动!

第七步:验证猜想,获取绝对路径成功!
同样是执行项目二级目录"c文件夹"下的b.js,此次在Terminal中使用 node b.js 命令执行,获取正确,如下:

48f9c68b64d4d1dbbbd9479ab80092aa.png


再次验证,在Terminal中使用node d.js 命令,执行三级目录“d文件夹”下的d.js模块,同样获取正确,如下:

47a1cfdaac0864a94bba945c27d90c5b.png

对项目一级目录下的aa.js,在Terminal中同样用node aa.js 命令执行,同样获取正确,如下图:

915d599dda845e3226e815d2b25bf344.png

心中石头落地~

第八步:对比分析,总结结论

基于node的内置path模块,使用path.resolve()方法获取执行的JS模块的绝对路径时:

1)如果JS模块在项目的一级目录下,使用webstorm的快捷键Ctrl + shift + F10 、 右键菜单点击 “Run”或在Terminal窗口中使用node命令,执行JS模块,都能正确获取JS模块的绝对路径。

2)如果JS模块在项目的二级及更深目录中,在使用webstorm的快捷键Ctrl + shift + F10 或 右键菜单 点击“Run”执行模块时,获取的绝对路径错误;而在Terminal窗口中使用node命令执行JS模块,则能获取到正确的绝对路径。

3)导致1)和2)情况下差异的原因:path是node的内置模块,它是一个对象,需要在node环境下,才能使它的方法得到正确执行。而在webstorm中使用快捷键或右键菜单执行JS模块,则是基于webstorm所搭建的执行环境,在使用path.resolve()方法时,项目中所有JS模块的绝对路径,都被webstorm的执行环境锁定为:“作为webstorm项目打开的目录路径”,即:当前在webstorm中打开的项目根目录路径

转载声明:

无需征询,转载带上链接

willman:那些年在webstorm中使用node的坑...​zhuanlan.zhihu.com
6b2fa4c6d319a2ed6dae36b718f111dc.png

即可!

如果你喜欢在微信阅读,可以在下面找到我:

更多的技术经验分享,公众号ID:HelloWorldPrograming

667116dbb4c14e2dd4b517c4bce26a63.png
长按上方二维码关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值