ESModule 和 commonjs module 混用

广告位招租
扫码页面底部二维码联系

在一些项目中,使用 webpack 打包本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】,难免会有 ESModule 和 com【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】monjs 混用的情况,当然,全部用 E【原创内容,转载请注明出处】【转载请注明来源】SModule 是最好的,符合标准。但是本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。,在不得已或偷懒情况下必须混用时,要注意【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】混用时的一些模块逻辑。

【本文受版权保护】【关注微信公众号:wwwtangshua【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。ngnet】【版权所有】唐霜 www.tangshu【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.netang.net著作权归作者所有,禁止商业用途转载。

babel 会将 ESModule 导入本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】进行处理,也就是说 import 的目标【本文受版权保护】【未经授权禁止转载】文件是 module.exports 导【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】出的 commonjs 文件是可以的。但原创内容,盗版必究。【原创内容,转载请注明出处】是前提是,必须先用 babel 进行编译【本文首发于唐霜的博客】【作者:唐霜】。我们用 webpack babel-l转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。oader 的时候,为了获得 tree 本文作者:唐霜,转载请注明出处。【本文受版权保护】shaking 的效果,所以会关闭 mo著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。dules 选项,这就导致在 webpa原创内容,盗版必究。【作者:唐霜】ck 进行打包时,babel 不会编译 原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】ESModule,也就不会优化 impo著作权归作者所有,禁止商业用途转载。【本文受版权保护】rt 逻辑,因此,这种情况下 impor【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】t 的目标文件是 module.expo原创内容,盗版必究。【本文首发于唐霜的博客】rts 时,运行时会报错,因为 webp【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。ack 认为 module 是不可写对象【作者:唐霜】本文版权归作者所有,未经授权不得转载。,你不能重写 module.export本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】s,但你可以重写 exports。

【本文受版权保护】原创内容,盗版必究。

这个逻辑是对的,webpack 按照标准【转载请注明来源】未经授权,禁止复制转载。进行了处理,并且是严格处理,这就要求模块【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】输出者,必须输出 exports.xxx【本文受版权保护】本文作者:唐霜,转载请注明出处。 这样的接口,从而可以通过 webpac著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】k 实现与 ESModule 完全对接。本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】但是,很遗憾,由于历史原因,我们不可能把著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。我们项目中全部的 module.expo著作权归作者所有,禁止商业用途转载。【本文受版权保护】rts 全部重新写过,而且对于 modu【作者:唐霜】【原创内容,转载请注明出处】le.exports = functio【作者:唐霜】【未经授权禁止转载】n 的情况根本无解。

本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshu【本文受版权保护】【原创内容,转载请注明出处】ang.net【版权所有,侵权必究】【关注微信公众号:wwwtangshua【本文受版权保护】【原创不易,请尊重版权】ngnet】

好消息是,我们也是有办法的,ESModu【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。le 和 commonjs 是可以混用的【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。。关键就在 require 和 impo【版权所有,侵权必究】【原创内容,转载请注明出处】rt 的区别。在 webpack 里面,【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】目标文件究竟遵循 ESModule 还是未经授权,禁止复制转载。【转载请注明来源】 commonjs,完全由导入语句 re本文作者:唐霜,转载请注明出处。【转载请注明来源】quire/import 来决定。例如,【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。你的 a.js 是 ESModule 导【原创不易,请尊重版权】【本文受版权保护】出模块,但是你在外面用 require 转载请注明出处:www.tangshuang.net原创内容,盗版必究。导入,那么它可以很自然的被使用,可以说无本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。缝对接。但是,如果你的 a.js 是 c原创内容,盗版必究。【原创内容,转载请注明出处】ommonjs 导出模块,而外面是 im【版权所有,侵权必究】未经授权,禁止复制转载。port 进行导入,那就必须格外小心,m原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.netodule.exports 的导出方式不【版权所有,侵权必究】【本文首发于唐霜的博客】可以,但是 exports.xxx 的方【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net式可以使用,当然,使用 export 导转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。出是最优选择。

未经授权,禁止复制转载。【原创内容,转载请注明出处】转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。ng.net

最终的结论是,不要用 import 去导【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】入原来的 module.exports 本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。的模块,而是要用 require,这在 【版权所有】唐霜 www.tangshuang.net【作者:唐霜】webpack 中,你可以把这种操作当作本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】日常操作,或者必须使用 require 【原创内容,转载请注明出处】【本文首发于唐霜的博客】的唯一特殊情况。

【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.netang.net【访问 www.tangshuang.n【原创不易,请尊重版权】【原创不易,请尊重版权】et 获取更多精彩内容】