You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Node.js中‘Cannot find package’报错问题

解决Node.js ESM中导入npm包ordinal出现ERR_MODULE_NOT_FOUND的问题

你遇到的这个问题是Node.js里ECMAScript模块(ESM)和CommonJS模块解析规则差异导致的,我来给你拆解下原因和解决办法:

核心问题分析

你用相对/绝对路径导入模块能正常运行,但直接写import ordinal from "ordinal"这种"裸模块"导入就报错,主要有两个原因:

  • Node.js的ESM加载器默认不会去全局node_modules目录查找裸模块,全局安装的包不在它的默认解析路径里
  • 部分老npm包只支持CommonJS格式,和ESM的导入规则不兼容

一步步解决

1. 优先本地安装包(最推荐)

全局安装的包在ESM环境下兼容性很差,直接在项目本地安装ordinal就能解决大部分问题:

npm install ordinal

安装完成后再运行你的main.mjs,应该就能正常导入使用了。

2. 兼容只支持CommonJS的包

如果ordinal是只提供CommonJS格式的老包,可以用Node.js自带的createRequire工具做兼容导入:

import { createRequire } from 'module';
// 生成当前ESM模块对应的require函数
const require = createRequire(import.meta.url);
// 用require方式导入CommonJS包
const ordinal = require('ordinal');

3. 确认你的文件处于ESM环境

你已经在用.mjs后缀的文件,这已经满足ESM环境要求;如果后续用.js文件写ESM代码,需要在项目根目录的package.json里添加:

{
  "type": "module"
}

4. 不推荐:使用全局包的临时方案

如果你一定要用全局安装的包,可以通过设置NODE_PATH环境变量让Node.js找到它,但这种方式会破坏模块解析的一致性,不建议在生产环境用:

NODE_PATH=$(npm root -g) node main.mjs

内容的提问来源于stack exchange,提问作者Evaine LeBlanc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:52:35