JavaScript中使用import引入缓存工具需确保其支持ES模块且环境兼容:lru-cache@10+可直接导入,memory-cache旧版不支持需替换或转换,自研工具须用.mjs或声明"type":"module";浏览器和Node.js均需满足对应ESM加载条件。

在 JavaScript 中使用 import 引入外部封装的缓存管理工具,关键在于该工具是否以 ES 模块(ESM)格式导出,并且你的运行环境(浏览器或 Node.js)是否支持 ESM。
确认缓存工具是否支持 ES 模块导入
主流缓存库如 lru-cache、memory-cache 或自研工具,需提供 export 语法(如 export default 或具名 export),才能用 import 正确加载。例如:
-
lru-cache@10+已默认支持 ESM,可直接import { LRUCache } from 'lru-cache' -
memory-cache旧版仅支持 CommonJS(require),若强行import会报错;需选用 ESM 友好替代(如@alloc/cache)或通过构建工具(Vite、Webpack)自动转换 - 自己写的缓存工具,需确保文件以
.mjs结尾,或package.json中声明"type": "module"
浏览器中直接 import(无需打包)
现代浏览器支持原生 ESM,可通过 type="module" 脚本引入 CDN 上的 ESM 版本:
<script type="module">
import { LRUCache } from 'https://cdn.skypack.dev/lru-cache@10';
const cache = new LRUCache({ max: 100 });
cache.set('key', 'value');
</script>
注意:本地文件路径需用相对/绝对 URL(如 ./utils/cache.js),不能用纯文件名(cache.js 不合法)。
立即学习“Java免费学习笔记(深入)”;
Node.js 中使用 import(需满足条件)
Node.js 从 v14.13+ 支持顶层 import,但必须满足以下任一条件:
- 文件扩展名为
.mjs - 所在项目
package.json中有"type": "module" - 启动时加
--input-type=module(适用于 inline 脚本)
示例(cache.js):
import { LRUCache } from 'lru-cache';
export const myCache = new LRUCache({ max: 50 });
再在其他文件中:import { myCache } from './cache.js';
常见问题与绕过方式
如果遇到 Cannot use import statement outside a module 错误,说明当前环境按 CommonJS 解析:
- Node.js 中临时改用
require(不推荐长期混用):const { LRUCache } = require('lru-cache'); - 用
createRequire在 ESM 文件中加载 CJS 模块:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const { LRUCache } = require('lru-cache');
更可持续的做法是优先选用明确标注 ESM 支持的缓存库,或自己封装时统一输出格式。


















