You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
同时我们的引用不能写成import DCDialog from '@/components/discount-coupon-dialog';
要写成import DCDialog from '@/components/discount-coupon-dialog.vue';
这样就可以直接引用文件当中了。
前言
在最近做项目的时候,项目部署到线上之后,出现了一种明明开发环境就可以,为什么到了生成环境就不可以的问题。出现该问题的根本原因还是对路径的引用上出现了错误。
我们通常会引用本地文件资源包括
在引用文件时,普遍是2种,相对路径和绝对路径
相对路径和绝对路径
相对路径
在w3cschools有这样一个表格来描述文件路径。
<img src="picture.jpg">
picture.jpg
在与当前文件位于相同目录<img src="images/picture.jpg">
picture.jpg
在相同目录中的images文件夹内<img src="/images/picture.jpg"
picture.jpg
在当前站点根目录下的images文件夹<img src="../picture.jpg">
picture.jpg
在上一级目录在一些网站中会把相对路径分为2类
文档相对路径
根相对路径
绝对地址
一些非本地的文件资源,一般都是使用绝对地址的,考虑到环境不同,有可能是通过拼接组成的(前一部分的服务器地址通过配置接口获取)
webpack
本地的资源如果使用
../../
在不同层级的文件之间引用会比较繁琐,因此可以使用webpack的alias进行设置。我们以Vue-cli的项目为例。如果我们想引用的图片是在
static
文件夹中,我们可以在Vue-cli项目中的webpack.base.conf.js
之中进行配置。我们假设还是之前的项目路径,只不过多了一个vue文件。
当我们在
component-a.vue
当中想引用bg.png
直接使用@static/img/bg.png
补充
这里再补充一下,如果使用别名引用,
VSCode
查找是找不到引用的。这里需要配置一下,在
vetur
插件说明当中有提到。我们以
@
为例子,要让VSCode
也认识这个路径,需要在项目根目录创建一个jsconfig.json
同时我们的引用不能写成
![-w708](https://camo.githubusercontent.com/6b79587da216ca295aa78195c8e52f208496a8e48462ef8122fc4ed242fc0da0/687474703a2f2f70666c77317a6d63312e626b742e636c6f7564646e2e636f6d2f31353337383632333139373238362e6a7067)
import DCDialog from '@/components/discount-coupon-dialog';
要写成
import DCDialog from '@/components/discount-coupon-dialog.vue';
这样就可以直接引用文件当中了。
总结
尽量不要使用根相对地址来进行本地资源文件的引用,在公司的项目当中遇到一个这样的问题,本地环境地址为
localhost:8080/#/app
,线上环境项目地址为https://xxx.com/app/#/app
,我所引用的图片资源地址为/static/img/xxx.png
,这样,在开发环境是没有问题的,因为根路径就是项目路径,但是部署到线上之后,因为项目映射在了二级目录,导致/static/img/xxx.png
最终引用的地址为https://xxx.com/static/img/xxx.png
,而实际图片的地址应该为https://xxx.com/app/static/img/xxx.png
,这就是使用根相对路径存在的问题,而如果使用文档相对路径就不会存在这个问题。同时如果是使用webpack来构建的项目,推荐使用alias
来作为文件引用,来减少繁琐的引用,同时也能够避免出现打包后文件路径异常的问题。接口路径
这里我们再提一下ajax的相对地址请求。
这里设定了几种不同情况下的请求。
request('/api/app.json')
http://xxx.com
http://xxx.com/api/app.json
request('api/app.json')
http://xxx.com
http://xxx.com/api/app.json
request('/api/app.json')
http://xxx.com/path
http://xxx.com/api/app.json
request('api/app.json')
http://xxx.com/path
http://xxx.com/path/api/app.json
request('api/app.json')
http://xxx.com/app/#/path
http://xxx.com/app/api/app.json
/xxx/xxx
请求的都是根路径下的地址接口xxx/xxx
请求的是当前路径下的地址接口使用场景
相对地址请求,在前后端分离的项目当中比较少见,目前总结了2种场景。
相对协议
我们从一些网站引入一些资源文件时可以看到,是不带http或者https前缀的比如淘宝
如果这样做之后,获取资源会根据当前访问的URL的协议进行变更,当前访问的是
https
的实际则是https://g.alicdn.com/alilog/mlog/aplus_v2.js
,如果是http
的,那么就是http://g.alicdn.com/alilog/mlog/aplus_v2.js
参考
(https://segmentfault.com/q/1010000000368868#a-1020000000368912)
The text was updated successfully, but these errors were encountered: