Node.js package.json脚本:Windows下ts-node传JSON参数报错求助
跨平台解决ts-node传递JSON配置的问题
问题根源
Linux bash支持用单引号包裹JSON参数,但Windows CMD/PowerShell不识别单引号;直接尝试转义双引号时,因package.json本身是JSON格式,嵌套转义规则容易导致解析错误。
解决方案
方案1:使用ts-node键值对参数格式(最简便)
ts-node的-O/--options参数支持直接传递键值对,无需包裹完整JSON对象,多参数用逗号分隔。修改后的脚本:
{ "scripts": { "fix:formatting-translation": "ts-node -O module=commonjs tools/sortTranslation.ts" } }
该写法完全避开引号问题,在Linux和Windows平台均可正常执行。
方案2:用ASCII转义序列替代双引号
利用双引号的ASCII十六进制转义码\x22替换JSON中的双引号,同时在package.json里对反斜杠做转义(写成\\x22),确保跨平台解析:
{ "scripts": { "fix:formatting-translation": "ts-node -O {\\x22module\\x22: \\x22commonjs\\x22} tools/sortTranslation.ts" } }
bash和Windows CMD都会将\x22解析为双引号,从而正确识别JSON配置。
方案3:正确嵌套转义双引号
如果必须传递完整JSON对象,需遵循package.json的JSON转义规则:脚本内的双引号用\转义,而package.json中\需再次转义为\\,最终写法:
{ "scripts": { "fix:formatting-translation": "ts-node -O \"{\\\"module\\\": \\\"commonjs\\\"}\" tools/sortTranslation.ts" } }
该方案可跨平台生效,但可读性较差,优先推荐前两种。
内容的提问来源于stack exchange,提问作者NotX
相关产品推荐
相关产品推荐

