Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘ 并不一定是webpack用错了import

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的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值