在Javascript中获取对象键定义的行号

时间:2017-10-05 19:06:36

标签: javascript config

说我有这样的文件:

export const dotReadme = {
  config1: { // <-- I want to get this line number.
    brief: 'foo1234',
    title: 'foo!',
  },
  config2: { // <-- And I want to get this line number.
    ...
  },
}

我想提供关于每个配置键定义位置的可追溯性。

所以稍后我想打印一些类似的东西:

`config1` was defined at `config.js:1`
`config2` was defined at `config.js:6`

最好的方法是什么?是否存在某种东西?

当前的想法

  • 一个babel插件,它将嵌套一个名为__line的密钥。但是,这仅在值为对象时有效。我可以将所有原始类型作为对象包装,以便我能够完成这项工作。
  • 使用babylon或其他东西解析AST并搜索键的行号。

也许某些检测库会有用,因为它看起来像是类似的东西,也许是babel-plugin-istanbul

约束

它应该通过源图片将行号提供回原始源。

用户将创建,编译,编辑并可能将这些配置文件发布到npm。

更新

所以看起来你可以在JS中填充原语,你只需要使用new String,这样就可以添加其他属性了。

> const str = new String('foo')
undefined
> str.__line = 1
1
> str
{ [String: 'foo'] __line: 1 }
>

我整理了一个概念证明babel插件here。目前这感觉就像最好的方法。

唯一的缺点是要求用户使用这个babel插件编译他们的配置文件。但我想这只是为了进行额外的细粒度调试,而拳击不应该影响任何代码。

0 个答案:

没有答案