问题描述

在本地运行 Claude Code 时,可能会遇到以下错误:

Stop [/Users/用户名/.claude/count_tokens.js] failed with non-blocking status code 1: 
(node:87997) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (node:internal/modules/cjs/loader:1378:20)
    at Module._compile (node:internal/modules/cjs/loader:1428:41)
    ...

错误原因

这个错误发生的原因是:

  • Claude Code 的 count_tokens.js 文件使用了 ES 模块语法(import 语句)
  • 但 Node.js 没有正确识别该文件为 ES 模块
  • Node.js 默认将 .js 文件当作 CommonJS 模块处理

解决方案

方案 1:添加 package.json(推荐 ✅)

这是最简单有效的解决方案:

  1. 重启 Claude Code

创建或修改 package.json 文件:

echo '{"type": "module"}' > package.json

进入 Claude 配置目录:

cd ~/.claude

验证成功:此方案已被验证有效!

方案 2:重命名文件扩展名

如果方案 1 不生效,可以尝试:

cd ~/.claude
mv count_tokens.js count_tokens.mjs

方案 3:清理重装

如果问题持续存在:

# 备份配置(可选)
cp -r ~/.claude ~/.claude_backup

# 清理配置
rm -rf ~/.claude

# 重新安装 Claude Code
npm install -g @anthropic-ai/claude-code

方案 4:修改文件内容(临时方案)

将 ES 模块语法改为 CommonJS 语法:

// 原代码:
import { readFile, stat, readdir, writeFile, mkdir } from 'node:fs/promises';

// 修改为:
const { readFile, stat, readdir, writeFile, mkdir } = require('node:fs/promises');

为什么推荐方案 1?

  1. 简单快速:只需要一个命令就能解决
  2. 不破坏原有结构:不需要修改 Claude Code 的原始文件
  3. 符合标准:按照 Node.js 官方规范解决 ES 模块问题
  4. 已验证有效:实际测试证明这个方案可以解决问题

预防措施

  • 保持 Claude Code 更新到最新版本
  • 如果遇到类似问题,优先检查是否缺少 package.json 配置

相关信息

  • 适用版本:Node.js v20.18.3 及相关版本
  • 操作系统:macOS(其他系统类似)
  • 解决时间:通常 1-2 分钟即可完成

总结

遇到 "Cannot use import statement outside a module" 错误时,99% 的情况下都是因为缺少 ES 模块配置。通过在 ~/.claude/ 目录下添加包含 "type": "module"package.json 文件,就能快速解决这个问题。

希望这个解决方案能帮助到遇到相同问题的开发者!🚀

Claude Code "Cannot use import statement outside a module" 错误解决方案

Claude Code "Cannot use import statement outside a module" 错误解决方案