Uncaught TypeError:Cannot redefine property: $router报错解决方案
原因:就如报错提示所描述的,不能重新定义$router,说明是重复定了$router。通常是因为在项目中安装了vue-router的依赖并且用Vue.use()使用了vue-router,还在index.html页面引入了vue-router.js文件。项目打包优化阶段,为了解决打包成功后,单文件体积过大的问题 ,可以通过 webpack 的 externals 节点,来配置并加载外部的 CDN
·
原因:就如报错提示所描述的,不能重新定义$router,说明是重复定了$router。通常是因为在项目中安装了vue-router的依赖并且用Vue.use()使用了vue-router,还在index.html页面引入了vue-router.js文件。
项目打包优化阶段,为了解决打包成功后,单文件体积过大的问题 ,可以通过 webpack 的 externals 节点,来配置并加载外部的 CDN 资源。
若只在发布阶段配置了externals节点:
- vue.config.js文件中的配置
config.when(process.env.NODE_ENV === 'production', config => {
config.entry('app').clear().add('./src/main-prod.js')
config.set('externals', {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios',
lodash: '_',
echarts: 'echarts',
nprogress: 'NProgress'
})
})
-
public/index.html文件中的配置
<!-- nprogress 的样式表文件 --> <link href="https://cdn.bootcdn.net/ajax/libs/nprogress/0.2.0/nprogress.min.css" rel="stylesheet"> <!-- element-ui的样式表文件 --> <link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/theme-chalk/index.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.2.0/vue-router.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.24.0/axios.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/nprogress/0.2.0/nprogress.min.js"></script> <!-- element-ui 的 js文件 --> <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/index.js"></script>
此时,若在开发阶段运行项目(npm run serve):
项目报错:Uncaught TypeError:Cannot redefine property: $router
原因:就如报错提示所描述的,不能重新定义$router,说明是重复定了$router。通常是因为在项目中安装了vue-router的依赖并且用Vue.use()使用了vue-router,还在index.html页面引入了vue-router.js文件,也就是vue-router重复使用导致。
解决方案:
可在public/index.html 中加入if判断:
<!-- 只有prod(发布阶段)生效 -->
<% if(htmlWebpackPlugin.options.isProd){ %>
<!-- nprogress 的样式表文件 -->
<link href="https://cdn.bootcdn.net/ajax/libs/nprogress/0.2.0/nprogress.min.css" rel="stylesheet">
<!-- element-ui的样式表文件 -->
<link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/theme-chalk/index.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.2.0/vue-router.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.24.0/axios.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/nprogress/0.2.0/nprogress.min.js"></script>
<!-- element-ui 的 js文件 -->
<script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/index.js"></script>
<% } %>
<!-- 只有prod(发布阶段)生效 -->
更多推荐
已为社区贡献2条内容
所有评论(0)