【发布时间】:2018-07-04 13:10:15
【问题描述】:
我目前正在学习 ES6 和 Webpack,并且我有一组特定的文件,import 语句无法处理。问题来了:
Sagas.js
import { deleteMe } from './DeleteMe';
import * as constants from '../Constants';
debugger;
DeleteMe.js
export const deleteMe = "Yep, it's loading";
console.log(deleteMe);
在上述文件中,deleteMe 无法从调试器(使用 Chrome Inspector)访问。 constants 是。
和 Constants.js
export const SET_COMMENTS = 'SET_COMMENTS';
在调试器停止之前(在 Chrome 检查器中),“是的,它正在加载”确实在控制台中触发,因此文件本身正在通过。
我试过了:
-
import * as deleteMeStuff from ./DeleteMe以查看deleteMeStuff是否会填充。它没有 - 重新启动 webpack-dev-server。没有骰子,编译时没有错误。在 ./DeleteMe 中输入
debugger可确认更改正在发生。 -
const deleteMe = "Yep, it's working"; export default deleteMe&import deleteMe from './DeleteMe'--> 还是不开心
在调试器中,我刚刚注意到 _DeleteMe 返回 {deleteMe: "Yep, it's loading", __esModule: true}
知道这里发生了什么以及如何解决它吗?我彻底糊涂了。在我的应用程序的其他文件中,还有大量其他导入文件可以成功运行。
【问题讨论】:
-
FWIW,你的导出和导入都很好(假设 Webpack 没有文件扩展名是可以的)。如果我在没有 Webpack 的情况下直接在 Chrome(现在它具有模块支持)中执行此操作并添加文件扩展名,则导入的
deleteMe存在。所以这是一个 Webpack 配置问题,我猜。 -
const deleteMe = "Yep, it's loading"; export { deleteMe };然后import { deleteMe } from './DeleteMe'; -
一个想法:在 Sagas.js 中除了您展示的内容之外,还有其他内容吗? Webpack 可能会摇树并看到您不使用
deleteMe,因此无需费心导入它。 -
deleteMe is not accessible from debugger是什么意思?我假设代码是由 babel 转译的,因此常量名称可能会更改为其他名称,甚至替换为遵循 ES2015 模块行为的表达式(0, _ModuleName.deleteMe) -
@TJ 摇树是个好主意,但是将 console.log(deleteMe) 扔到
Sagas.js中就可以了(???)。然而下一行的调试器仍然找不到deleteMe。 @Yury 诚然,我是 ES6/Babel/Webpack 的新手——这听起来很可行。有没有办法在 Chrome 检查器中追踪更改的常量名称?此外,这些更改的名称不会显示在 Chrome Inspector --> 来源中吗? (他们显示为deleteMe)
标签: javascript reactjs webpack ecmascript-6