uni-app怎么做才能让hbuilder运行H5时生成的index.html中对static资源引用采用相对路径
uni-app怎么做才能让hbuilder运行H5时生成的index.html中对static资源引用采用相对路径 我在HBuilderX中用uni-app默认模板创建了一个项目,开发运行在企业微信环境中的H5站点。为了便于调试微信JSSDK相关功能,我需要在本地调试时使用带域名的地址来访问,现发现问题如下:
直接通过HBuilderX运行是生成的首页index.html
如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>生产运营2.0</title>
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<link rel="stylesheet" href="/static/index.2da1efab.css">
</head>
<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<script src="/static/js/chunk-vendors.bd1ef1be.js"></script>
<script src="/static/js/index.78d3480f.js"></script>
</body>
</html>
打包发布后的首页index.html
如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>生产运营2.0</title>
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<link rel="stylesheet" href="./static/index.2da1efab.css">
</head>
<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<script src="./static/js/chunk-vendors.bd1ef1be.js"></script>
<script src="./static/js/index.78d3480f.js"></script>
</body>
</html>
两者的差异主要在src="/static/js/chunk-vendors.bd1ef1be.js"
部分,打包的引起地址多了一个点,无论部署在哪一级目录下,如何用Nginx转发都正常,运行模式时如果用Ngnix转发到域名的二级目录下就无法正常加载static
下的资源。
manifest.json
中配置
"h5": {
"title": "生产运营2.0",
"router": {
"base": "./"
},
"sdkConfigs": {
"maps": {}
},
"devServer": {
"https": false,
"allowedHosts": ["localhost", "192.168.0.66", "我的域名"]
}
}
在uni-app中,要确保HBuilder运行H5时生成的index.html
中引用的static
资源采用相对路径,可以通过配置项目的路径别名和修改资源引用方式来实现。以下是一个示例,展示了如何在uni-app项目中实现这一点。
步骤一:配置路径别名(可选)
首先,在vue.config.js
(如果你使用的是Vue CLI 3+)或webpack.config.js
(如果你自定义了Webpack配置)中配置路径别名。不过,uni-app通常不需要这一步,因为它已经内置了对静态资源的处理。
步骤二:调整资源引用方式
在uni-app中,静态资源通常放在static
目录下。为了确保引用这些资源时使用相对路径,你可以按照以下方式操作:
-
确保静态资源放在
static
目录下:你的项目结构可能看起来像这样:
your-uni-app/ ├── pages/ │ ├── index/ │ │ └── index.vue ├── static/ │ ├── images/ │ │ └── logo.png ├── manifest.json ├── pages.json └── App.vue
-
在Vue组件中引用静态资源:
在Vue组件中,你可以使用相对路径来引用
static
目录下的资源。例如,在pages/index/index.vue
中:<template> <view> <image src="../../static/images/logo.png" alt="Logo"></image> </view> </template> <script> export default { name: 'Index' } </script> <style scoped> /* 样式中引用静态资源也可以使用相对路径 */ .logo { background-image: url('../../static/images/logo.png'); } </style>
-
构建并运行项目:
使用HBuilder运行你的uni-app项目,并生成H5版本的
index.html
。检查生成的HTML文件,你应该会看到静态资源是通过相对路径引用的。
注意事项
- 确保在引用资源时使用正确的相对路径层级。
- 如果你的项目结构复杂,可能需要调整路径层级以确保相对路径正确。
- uni-app在构建时会处理静态资源的路径,因此通常不需要手动配置Webpack路径别名(除非你有特殊需求)。
通过上述步骤,你应该能够确保在HBuilder运行H5时,index.html
中引用的static
资源采用相对路径。