macOS下使用pnpm创建Angular项目时路径异常:项目生成在用户主目录而非当前工作目录
我之前也碰到过一模一样的问题!当时在macOS上折腾了好一会儿才找到根源,给你分享几个亲测有效的解决方案:
优先用pnpm exec调用Angular CLI
这是我最快解决问题的方法,直接用pnpm的exec命令强制使用pnpm生态下的Angular CLI,彻底避开全局命令的路径冲突:pnpm exec ng new <myprojectname>原理是
pnpm exec会优先查找当前pnpm环境管理的包,不会和npm全局安装的Angular CLI混淆,路径解析也会严格遵循当前工作目录。重新用pnpm全局安装Angular CLI
如果你之前是用npm install -g @angular/cli装的全局Angular CLI,pnpm调用时可能会因为包管理的隔离机制出现路径解析异常。可以先卸载npm的全局包,再用pnpm重新安装:npm uninstall -g @angular/cli pnpm add -g @angular/cli安装完记得重启终端,让新的全局命令路径生效,再试
pnpm ng new <myprojectname>创建项目。检查并调整PATH环境变量顺序
有时候macOS的PATH里npm的全局bin目录优先级比pnpm的高,导致你调用的ng其实还是npm安装的版本,和pnpm配合就会出问题。先查看当前PATH:echo $PATH找到pnpm的全局bin路径(通常是
~/.local/share/pnpm),如果它在npm的路径(比如/usr/local/bin)后面,就需要在~/.zshrc(用zsh的话)或者~/.bashrc(用bash的话)里添加:export PATH="$HOME/.local/share/pnpm:$PATH"保存后执行
source ~/.zshrc或者source ~/.bashrc让配置生效,再重新尝试创建项目。本地安装Angular CLI再创建项目
如果你不想用全局包,也可以在当前目录先初始化pnpm项目,再本地装Angular CLI后创建:# 初始化pnpm项目 pnpm init -y # 本地安装Angular CLI作为开发依赖 pnpm add -D @angular/cli # 本地调用ng创建项目,指定当前目录 pnpm exec ng new <myprojectname> --directory ./
之所以用npm时正常,是因为npm的全局包路径解析和当前工作目录的关联逻辑和pnpm不同,pnpm的包隔离机制会严格区分全局和本地包的环境,所以当全局命令来源不统一时就会出现路径异常。
内容来源于stack exchange

