Windows下运行npm run dev提示cross-env未被识别如何解决?
问题成因
- 核心原因是Linux与Windows的命令行语法差异:原项目dev脚本中
--exec参数后使用单引号包裹执行命令,Linux shell可以正常识别单引号作为命令边界符,但Windows的cmd/PowerShell不支持单引号包裹逻辑,会将'cross-env HTTP_PORT=4080 NODE_ENV=develop ts-node'整体当做一个可执行文件名解析,因此出现“cross-env未被识别为命令”的报错,与cross-env是否安装无关。 - 附带问题:项目中
dto:publish脚本使用的rm -rf、cp均为Linux专属命令,后续执行该脚本时Windows环境也会触发报错。
修复方案
你可以根据使用场景选择以下任意一种方案:
方案1:仅适配本地Windows环境
直接修改package.json中的dev脚本,将--exec后的单引号替换为转义后的双引号即可:
"dev": "nodemon --watch src --watch package.json --watch tsconfig.js --delay 1 --exec \"cross-env HTTP_PORT=4080 NODE_ENV=develop ts-node\" src/index.ts"
修改后重新执行npm run dev即可正常启动。
方案2:全平台兼容改造(推荐,适合多人协作项目)
一次性修改所有脚本适配多系统,步骤如下:
- 安装跨平台命令替代工具:执行
npm i -D rimraf copyfiles,其中rimraf替代rm -rf,copyfiles替代cp - 替换所有scripts配置为全平台兼容版本:
"scripts": { "dev": "nodemon --watch src --watch package.json --watch tsconfig.js --delay 1 --exec \"cross-env HTTP_PORT=4080 NODE_ENV=develop ts-node\" src/index.ts", "lint": "tslint -p .", "build": "tsc", "dto:build": "tsc src/dto/*.ts --declaration --emitDeclarationOnly --experimentalDecorators --outDir dto", "dto:publish": "rimraf dto && npm run dto:build && copyfiles package.dto.json dto/package.json && cd dto && npm publish --access public" }
方案3:使用Linux兼容终端
无需修改任何代码,本地使用Git Bash、WSL(Windows子系统)等兼容Linux shell语法的终端执行启动命令即可正常运行原配置。
内容的提问来源于stack exchange,提问作者riv_ms
相关产品推荐
相关产品推荐

