如何在TypeScript文件中直接执行命令(不通过package.json配置)
问题修复方案
错误根因排查&修复
1. 修复tsconfig.json语法错误
你当前的src/devTools/server/tsconfig.json存在JSON语法不兼容问题:配置项末尾多余的尾随逗号在部分JSON解析器中会触发解析失败,修改为如下内容:
{ "compilerOptions": { "target": "ES2020", "module": "CommonJS" }, "exclude": ["node_modules"], "extends": "../../../tsconfig.json" }
2. 修复TS脚本中的spawn调用问题
spawn默认不会将子进程的输出、错误信息挂载到主进程,你看不到具体报错,同时Windows系统下直接调用react-scripts会找不到执行文件,需要兼容后缀,另外要绑定执行上下文为项目根目录,修改scripts/jest/runCoverage.ts代码如下:
import { spawn } from 'child_process'; // 兼容Windows系统的.cmd后缀 const reactScriptsCmd = process.platform === 'win32' ? 'react-scripts.cmd' : 'react-scripts'; const jestProcess = spawn(reactScriptsCmd, ['test'], { // 继承主进程的输入输出,能直接看到jest的报错信息 stdio: 'inherit', // 绑定工作目录为项目根目录,避免相对路径错误 cwd: process.cwd() }); // 监听子进程错误,打印具体报错 jestProcess.on('error', (err) => { console.error('子进程执行失败:', err); }); // 监听退出事件,同步退出码 jestProcess.on('exit', (code) => { process.exit(code || 0); });
3. 不需要package.json scripts的直接执行方式
直接在项目根目录的终端执行如下命令即可运行,不需要配置scripts:
ts-node -r tsconfig-paths/register --project src/devTools/server/tsconfig.json --transpile-only scripts/jest/runCoverage.ts
如果执行提示找不到ts-node,全局安装即可:npm i -g ts-node tsconfig-paths
内容的提问来源于stack exchange,提问作者Firefouks
相关产品推荐
相关产品推荐

