Open YBFACC opened 3 years ago
为什么编译后的代码是用的箭头函数?
为什么编译后的代码是用的箭头函数?
webpack的处理的原因吧,不过这里箭头函数也确实舒服。
为什么编译后的代码是用的箭头函数?
箭头函数直接确定了this指向,声明了也不调用。等到你调用该模块的时候,直接返回模块的引用
我发现webpack5默认编译时按ES6处理的 所以编译后会有箭头函数 可以设置target属性['web', 'es5']
我发现webpack5默认编译时按ES6处理的 所以编译后会有箭头函数 可以设置target属性['web', 'es5']
关键是这里的值引用模式。箭头函数也确实优雅
CommonJS和ES Modules
导出的差异
CommonJs
是对值的浅拷贝ES Modules
是对值对引用参照参考文章中的方法使用webpack进行打包
准备
Npm 下载webpack@5.0.0-beta.26和webpack-cli@bate
按照webpack官网的配置Mode:none,不使用任何优化措施
拷贝
我们使用CommonJS来进行打包
在index.js中写入
在obj.js中写入
然后我们执行得到以下结果
可以对象中的子对象发生了改变,证明了CommonJs是对其进行浅拷贝
使用webpack对文件进行打包,大概可以简化为以下代码
webpack_module_cache 存储已经导出的结果,防止二次倒出
__webpack_require将webpack_module_cache__中的数据返回
__webpack_modules__将原来的模块文件中的代码,使用箭头函数进行包裹。(第一项为空)
PS:Js中是词法作用域,在声明时就确定了作用域
看到module.exports只是对值进行浅拷贝
引用
我们使用CommonJS来进行打包
在index.js中写入
在obj.js中写入
然后我们执行得到以下结果
使用webpack对文件进行打包,大概可以简化为以下代码
__webpack_require__.o确定属性是否已存在
__webpack_require__.d将definition上的属性挂载到exports上
关键代码:
用箭头函数动态的返回相应的值。
注意:这里虽然关键代码在模块代码执行前声明,但是没有违背let的“暂时性死区“原则。因为这里的函数会在exports使用属性时触发getter时使用。
参考
利用 webpack 理解 CommonJS 和 ES Modules 的差异