在 Node.js 中需要带有注释的 JSON

Tho*_*lla 4 javascript json node.js typescript json5

如果您使用 typescript,您可以初始化默认的 tsconfig.json,该 json 中将包含 javascript // 和 /* */ 注释。我遇到过 ts-jest 的情况,我需要要求我的 tsconfig 并解析它,但 jest 没有解析它,因为 json 不允许注释。看到这个我不确定打字稿如何处理它,但它似乎偏离了规则。

// this fails if tsconfig has comments
const tsconfig = require('./tsconfig')
Run Code Online (Sandbox Code Playgroud)

我想保留这些注释,因为它们确实有助于理解和维护我的 tsconfig.json,并且我希望我的配置能够避免重复代码并使事情更加动态。

有没有办法使用nodejs要求带有注释的json文件?

Mic*_*ler 7

json5可以做到这一点。安装 JSON5 然后:

\n\n
const\xc2\xa0JSON5\xc2\xa0=\xc2\xa0require(\'json5\');\nconst tsconfig = JSON5.parse(jsontxt);\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,您可以自行删除注释,但存在一些缺陷,这就是不建议这样做的原因。您应该寻找:

\n\n
    \n
  • 字符串可能包含看起来像注释的序列,但事实并非如此。
  • \n
  • 注释可能包含看起来像字符串开头的序列,但事实并非如此。
  • \n
  • 字符串可能包含"不标记字符串结尾的内容,例如"foo\\"bar". 更令人困惑的是"foo\\\\",第二个“确实结束了字符串。
  • \n
  • 评论//可能包含/*,但这不会启动多行注释。
  • \n
  • 多行注释中的A//不会启动单行注释,因此删除 /* // */ "hi"结果中的注释为"hi".
  • \n
  • a 是否将\\单行延续到下一行?a 是否\\*/结束多行注释,或者是否使\\行为*有所不同?(JavaScript 都不支持)。
  • \n
  • 是否支持多行字符串(它们在 JavaScript 中)?它们是如何声明/处理的。
  • \n
\n