M1芯片MacOS执行nest generate module报skipImport错误如何解决
问题背景
- 运行环境:搭载M1芯片的Mac设备,操作系统为MacOS Monterey
- 初始操作:执行
sudo npm install -g @nestjs/cli全局安装NestJS CLI - 操作表现:执行
nest new message创建新项目流程正常,执行nest generate module messages生成新模块时触发报错 - 已尝试排查:执行
npm i -g @nestjs/schematics全局安装@nestjs/schematics(不确定该依赖是否为必需项),未解决问题 - 对比现象:完全相同的操作步骤在Ubuntu 20、Ubuntu 22系统上执行无任何报错
报错详情
/Users/homayoun/training/messages/node_modules/@angular-devkit/schematics-cli/bin/schematics.js:338 throw new Error(`Unknown argument ${key}. Did you mean ${(0, yargs_parser_1.decamelize)(key)}?`); ^ Error: Unknown argument skipImport. Did you mean skip-import? at parseArgs (/Users/homayoun/training/messages/node_modules/@angular-devkit/schematics-cli/bin/schematics.js:338:19) at main (/Users/homayoun/training/messages/node_modules/@angular-devkit/schematics-cli/bin/schematics.js:122:49) at Object.<anonymous> (/Users/homayoun/training/messages/node_modules/@angular-devkit/schematics-cli/bin/schematics.js:367:5) at Module._compile (node:internal/modules/cjs/loader:1105:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) at node:internal/main/run_main_module:17:47 Failed to execute command: node @nestjs/schematics:module --name=messages --no-dry-run --no-skipImport --language="ts" --sourceRoot="src" --spec.
报错原因
这个错误由版本不兼容直接导致:
全局安装的NestJS CLI版本,和项目初始化时拉取到本地node_modules中的@angular-devkit/schematics-cli版本存在参数命名规则差异。旧版本NestJS CLI调用schematics生成代码时,会传递驼峰格式的--skipImport参数,但新版本的@angular-devkit/schematics-cli仅识别短横线分隔的--skip-import参数,因此直接抛出参数未知的错误。
Ubuntu环境下无报错,是因为该环境下全局CLI和项目本地依赖的版本天然对齐,不存在参数规则差异;M1芯片Mac上因为npm全局安装路径的权限配置、项目初始化时拉取依赖的版本锁差异,刚好安装到了不兼容的版本组合,因此触发问题。
之前全局安装@nestjs/schematics没有效果,是因为nest generate系列命令执行时,会优先读取当前项目node_modules下的本地依赖,不会调用全局安装的schematics包,全局安装的版本不会参与项目内的命令执行逻辑。
解决方法
- 优先方案:对齐全局CLI和项目本地依赖版本
- 卸载全局旧版本NestJS CLI:
sudo npm uninstall -g @nestjs/cli - 根据项目使用的Nest核心包版本,安装对应大版本的全局CLI,例如项目使用Nest 9则执行:
如果项目使用Nest 10,将命令中的版本号替换为sudo npm install -g @nestjs/cli@9@10即可 - 进入项目目录,删除
node_modules文件夹和package-lock.json文件,重新执行npm install完成依赖安装,之后再执行generate相关命令即可恢复正常
- 卸载全局旧版本NestJS CLI:
- 备用方案:绕开全局CLI,使用项目本地CLI执行命令
- 进入项目目录,将NestJS CLI安装为项目开发依赖:
npm install @nestjs/cli --save-dev - 后续执行生成类命令时,通过npx调用本地CLI即可,例如生成模块的命令为:
npx nest generate module messages
- 进入项目目录,将NestJS CLI安装为项目开发依赖:
内容的提问来源于stack exchange,提问作者AmirReza
相关产品推荐
相关产品推荐

