下面是关于解决Vue-cli npm run build生产环境打包,本地不能打开的问题的详细攻略。
问题描述
当在vue-cli项目中运行npm run build
命令时,可以成功地将项目打包到生产环境,然而,在本地运行生成的文件时,可能会遇到“无法找到文件”或“损坏”的问题。
解决方案
1. 确认publicPath路径
在打包前,需要先确认publicPath
路径的正确性。在config/index.js
文件中,需要设置build
对象下的assetsPublicPath
值为根路径/
。
build: {
assetsPublicPath: '/'
}
2. 设置路由模式
如果使用了vue-router,需要确认路由模式,即mode
属性的值。有两种模式:hash
和history
。在打包后,使用hash
模式打开生成的文件时,只需要在url地址中加上#
号即可。而使用history
模式打开生成的文件时,可能会遇到404错误。
如果使用了history
模式,需要修改config/index.js
文件中build
对象下的historyApiFallback
为true
。
build: {
historyApiFallback: true
}
示例1
在vue-cli项目中使用history
模式,我们需要将router.js
中的mode
属性设置为history
。
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '@/views/Home.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Home',
component: Home
}
]
const router = new VueRouter({
mode: 'history',
routes
})
export default router
修改完毕后,在运行npm run build
打包命令后,可以在本地双击打开生成的index.html
文件,访问本地生产环境下的网站。
示例2
如果在vue-cli项目中使用了iframe
嵌套,可能会遇到子页面无法访问父页面资源的问题。此时,需要在父页面中设置base
标签。
在父页面的index.html
中,设置<head>
标签下的<base>
标签,指向生产环境中的根目录。
<!DOCTYPE html>
<html lang="en">
<head>
<base href="/">
<meta charset="utf-8">
<title>父页面</title>
</head>
<body>
<div>
<!-- 嵌入子页面 -->
<iframe src="http://localhost:8080/child.html"></iframe>
</div>
</body>
</html>
设置完毕后,子页面可以正常访问父页面的资源。
总结
通过确认publicPath
路径和修改路由模式,可以解决vue-cli打包后本地无法访问的问题。
如果使用了iframe
嵌套,需要设置base
标签才能让子页面正常访问父页面资源。