webpack 本地 import 模块时,在异步函数里面使用此模块时发生了什么?

2020-01-14 22:07:58 +08:00
 chenliangngng

我用 vue cli3 搭的项目出现了点问题

main.js 如下

import {a} from './test'

setTimeout(() => {

debugger

console.log(a)

}, 0)

test.js 如下

export const a = {}

如上,在本地编译的时候,你会发现在 debugger 的地方,浏览器直接调用变量 a 会提示 a 未声明。

参照以往调试经验,在异步函数的回调中,变量 a 被重命名成了_a 或者_a1,_a2 之类的东西,而在 debugger 处调用_a 和_a 之类的依然会提示变量未声明

请问这是怎么回事?

我项目里面的实际问题是,通过 import 导入一个模块 a 以后,在接口的回调函数中直接调用了 a,在本地调试时,浏览器提示_a 未声明,而不是 a 未声明。打包以后的代码在环境上跑却没有任何问题,问题仅限在本地调试时出现

1499 次点击
所在节点    前端开发
2 条回复
yyfearth
2020-01-15 08:20:38 +08:00
一般情况下你需要 sourcemap 这样浏览器会自动给你做一些事情 但是 webpack 处理 import 的情况除外

import {a} 这种 不像 function 会把(a)编译成 _a _a1 这样
因为 webpack 之类的 会把 module 编译成非常复杂的东西 比方说 __WEBPACK_XXXXX_MODULE_.XXXXXX["a"] 类似这样的东西 根本摸不着头脑
所以你需要被 debugger 放到 console.log 后面 就可以看到结果了
yyfearth
2020-01-18 03:21:16 +08:00
我碰到的问题比你的糟糕多了
我之前碰到了 babel 和 webpack 插件版本冲突
导致 import 部分出问题 然后爆出来 __WEBPACK_XXXXX_MODULE_... not a function
所以我才发现了上面这种情况
但是完全无能为力 console.log 的结果完全正确 但是就是执行不了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637954

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX