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