bug背景

运行项目(比如vue项目)出现错误:
Cannot assign to read only property 'exports' of object '#<Object>'

代码大概是:

module.exports = lang;

网上基本上的说法都是webpack的使用问题,import和module.exports不能混用。
虽然改成推荐的export default lang;确实能解决问题,
但是有时候你并没有混用,因而产生疑惑了。

真正错误

仔细检查代码。这里的例子是用在i18n模块
lang里面有两项使用了同一个key。
大概是这样

let lang = {
	"ABC1":"xxxx yyyy.",
	"ABC1":"zzzzzzz.",
}

这个代码,在使用export default语法时并不会报错。
但是在module.exports 的写法时就不行。
修复这个问题把其中一个ABC1改成ABC2,就行了。

事实证明,代码错误会导致报错,并不一定是所谓的import和module.exports混用导致的错误。

额外的说明

之所以发现这一点,是因为当时还想用node脚本读取这个配置,检查配置是否正确。但是配置babel又很麻烦,所以想要写成module.exports的方式,使得两边都能通用。
也成export default会导致node报错SyntaxError: Unexpected token export

当然,期待官方团队,让node支持的es6特性越来越多。
顺便说一下,nodejs的作者新写了deno,默认就是支持es6的。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐