怎么解决 MacM1 zsh: command not found: npm
时间: 2023-06-10 18:02:33 浏览: 210
针对 Mac M1 的处理器,需要使用 Rosetta 2 虚拟机来运行 npm,你可以尝试在终端中输入以下命令:
```
arch -x86_64 zsh
```
然后再尝试执行 npm 命令,看看是否可以成功。此外,还可以在终端中安装 Homebrew,并使用以下命令来安装 Node.js:
```
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
```
```
arch -x86_64 /usr/local/bin/brew install node
```
安装完后,再次尝试执行 npm 命令看看是否可以成功。
相关问题
MacM1 zsh: command not found: npm
这个问题可能是因为您的系统中没有安装npm或者npm没有被正确配置。您可以尝试重新安装npm,或者检查您的配置文件中是否正确设置了npm的路径。如果还有问题,您可以把具体的错误信息提供给我,我可以更好地帮助您解决问题。
Could not set environment: 150: Operation not permitted while System Integrity Protection is engaged 如果是MacM1pro遇到这个问题怎么解决
### 解决 Mac M1 Pro 上因 System Integrity Protection (SIP) 导致的 'Operation not permitted' 错误
在 macOS 中,System Integrity Protection (SIP) 是一种安全功能,旨在防止未经授权修改操作系统的关键文件和进程。然而,在某些开发场景下,可能会遇到 SIP 带来的限制问题,例如设置环境变量失败并返回错误 `Could not set environment: 150: Operation not permitted`。
以下是针对此问题的具体解决方案:
#### 方法一:禁用 System Integrity Protection (SIP)
虽然不推荐完全关闭 SIP,但在特定情况下可以临时禁用来解决问题。具体操作如下:
1. **重启设备进入恢复模式**
关闭计算机后重新启动,并按住 `Command + R` 组合键直到看到 Apple 标志或其他指示符[^2]。
2. **打开终端应用**
在恢复模式界面中,点击顶部菜单栏中的“实用工具”,然后选择“终端”。
3. **执行命令以禁用 SIP**
输入以下命令来禁用 SIP 并按下回车:
```bash
csrutil disable
```
4. **确认状态并退出**
使用以下命令验证 SIP 是否已成功禁用:
```bash
csrutil status
```
如果显示 `System Integrity Protection status: disabled.` 则表示禁用成功[^3]。
5. **重启系统**
完成以上步骤后正常重启电脑即可。
需要注意的是,这种方法会降低系统的安全性,因此仅建议在必要时使用,并尽快重新启用 SIP。
---
#### 方法二:通过配置 Launchd 设置环境变量
如果不想禁用 SIP,可以通过调整 launchd 配置的方式间接实现目标。launchd 的用户级配置文件位于 `~/Library/LaunchAgents/` 下面。创建一个新的 plist 文件用于定义所需的环境变量。
1. 创建新的 `.plist` 文件
执行以下命令生成一个名为 `com.example.environment.plist` 的新文件:
```bash
nano ~/Library/LaunchAgents/com.example.environment.plist
```
2. 编辑内容为以下 XML 结构(替换为你自己的变量名和值):
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.environment</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>export MY_VAR=my_value; echo $MY_VAR > /tmp/my_var.txt</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>MY_VAR</key>
<string>my_value</string>
</dict>
</dict>
</plist>
```
3. 加载配置文件
将该服务加载到当前用户的环境中运行:
```bash
launchctl load ~/Library/LaunchAgents/com.example.environment.plist
```
这样就可以绕过 SIP 对全局环境变量设置的影响[^4]。
---
#### 方法三:利用 zsh 或 bash 配置文件设定局部环境变量
对于大多数开发者而言,直接编辑 shell 初始化脚本可能是更简单的方法之一。这不会触及受保护区域从而避免触发 SIP 权限拒绝。
1. 修改个人 Shell Profile 文件
添加自定义环境变量至 `~/.zshrc` 或者 `~/.bash_profile` 当前使用的默认 shell 脚本里去。
示例代码片段如下所示:
```bash
export PATH="/usr/local/bin:$PATH"
export CUSTOM_ENV_VAR="custom_value"
```
2. 应用更改后的配置项
让最新的改动立即生效需重新加载 profile 文件或者新开 terminal session 即可完成同步更新动作。
```bash
source ~/.zshrc
```
这种方式适用于绝大多数日常编程需求而无需担心违反苹果的安全策略规定[^5]。
---
### 总结
当面对由 SIP 引发的操作受限情况时,可以根据实际需要采取不同层次的技术手段加以应对。从最激进彻底地移除防护机制直至仅仅微调本地化的工作流程都有各自适用范围及其优缺点所在。
阅读全文
相关推荐













