vue 引入第三方js报错undefined

本文介绍了一个关于高德地图在项目中打包时出现js未加载的问题,并详细记录了排查过程及解决方案。作者通过调整webpack配置,确保了高德地图资源在不同环境下正确加载。

今天在项目中使用到高德地图,在本地npm run dev运行起来没有问题,可是在打包发布到测试环境后,使用高德地图的界面就会报Amap undefined,按照自己原先的教程(vue2(webpack)调用amap高德地图及其UI组件和标记物)应该是没有问题的,其他项目也是这么用的,可是这次怎么不行了?然后F12打开刷新页面看了下,发现原来没有加载高德地图的js。额,可是为什么呢?之前的项目怎么就没有问题?想想应该是包的问题。

找到了两个打包文件:

webpack.dev.config.js关键部分如下:

new HtmlWebpackPlugin({
            title: '后台管理',
            filename: '../index.html',
            inject: false
        }),

而webpack.test.config.js关键部分如下:

 new HtmlWebpackPlugin({
            title: '后台管理',
            favicon: './td_icon.ico',
            filename: '../index.html',
            template: '!!ejs-loader!./src/template/index.ejs',//这个是编译是用到的模板,像高德地图之类的东西都放这里面才能打包进去
            inject: false
        })

那么重点就是在template配置项上了,原来,项目在npm run dev 的时候,走的是默认的项目根目录下的index.html。而在测试环境,用了ejs模板类型的index.ejs目录在./src/template/下。ok,那么找到index.ejs文件,将需要的高德地图js配置进去就可以了。

想要了解HtmlWebpackPlugin的,可以参考这个博客哦:https://segmentfault.com/a/1190000013883242

### Vue引入腾讯地图时 'TMap is not defined' 报错解决方案 在 Vue 项目中使用腾讯地图时,如果遇到 `'TMap is not defined'` 的错误提示,通常是因为未正确加载腾讯地图的 JavaScript API 或者其全局变量 `TMap` 尚未初始化就尝试访问它。 以下是详细的解决方法: #### 方法一:通过 `<script>` 动态加载腾讯地图 API 可以通过动态创建 `<script>` 标签的方式加载腾讯地图的 JS 文件。这种方式可以确保在组件生命周期内完成加载并定义好 `TMap` 变量后再执行相关逻辑[^1]。 ```javascript export default { data() { return { tmapLoaded: false, }; }, mounted() { this.loadTencentMap(); }, methods: { loadTencentMap() { const script = document.createElement('script'); script.src = 'https://maps.qq.com/js?v=2.exp&key=YOUR_API_KEY'; // 替换 YOUR_API_KEY 为你自己的密钥 script.onload = () => { console.log('Tencent Map Loaded:', TMap); this.tmapLoaded = true; if (this.tmapLoaded && typeof TMap !== 'undefined') { this.initMap(); // 初始化地图 } }; document.head.appendChild(script); }, initMap() { const center = new TMap.LatLng(39.984075, 116.30752); // 设置中心点坐标 const map = new TMap.Map(document.getElementById('container'), { // 容器ID center: center, zoom: 14, }); }, }, }; ``` --- #### 方法二:利用 `window.TMap` 判断是否已加载成功 由于腾讯地图会将自身的功能挂载到全局对象上,在脚本完全加载之前可能无法找到 `TMap` 对象。因此可以在代码中加入判断机制来确认 `TMap` 是否已经可用[^2]。 ```javascript if (!window.TMap) { setTimeout(() => { if (typeof window.TMap === 'object') { this.initMap(); } else { console.error('Failed to load Tencent Maps API.'); } }, 1000); // 延迟一秒再次检测 } ``` --- #### 方法三:借助插件封装腾讯地图 SDK 为了简化集成过程以及避免手动处理异步加载问题,可以选择一些现成的 Vue 插件或者工具库来进行封装操作。例如 [vue-tencent-map](https://github.com/vue-maps/vue-tencent-map),这类第三方包能够帮助开发者更方便地管理依赖关系和状态更新等问题。 安装命令如下所示: ```bash npm install vue-tencent-map --save ``` 随后按照官方文档指引配置即可正常使用而无需担心上述提到的各种兼容性隐患。 --- ### 注意事项 - **API 密钥申请**:务必前往腾讯云控制台获取合法有效的 Key 并替换掉示例中的占位符部分。 - **跨域请求限制**:某些情况下可能会因为浏览器安全策略而导致资源拉取失败,请检查网络面板是否存在 CORS 错误信息。 - **按需加载优化**:对于大型应用来说建议采用懒加载技术减少首屏渲染时间开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值