
本文详解为何在 node.js 中直接使用 import 导入 image-js 会报错“cannot use import statement outside a module”,并提供标准、可靠的解决方案:将项目配置为 es 模块。
本文详解为何在 node.js 中直接使用 import 导入 image-js 会报错“cannot use import statement outside a module”,并提供标准、可靠的解决方案:将项目配置为 es 模块。
在 Node.js 中,import 和 export 是 ECMAScript 模块(ESM)的语法,而 Node.js 默认以 CommonJS 模式运行 JavaScript 文件(即 .js 文件被视为 commonjs 类型)。当你在未启用 ESM 的环境中写入 import { Image } from 'image-js';,Node.js 会抛出如下错误:
Uncaught SyntaxError: Cannot use import statement outside a module (at js.js:1:1)
该错误与 image-js 本身无关,而是 Node.js 运行时对模块系统的限制所致。
✅ 正确解决方案是:显式声明项目使用 ES 模块。最推荐、最规范的方式是在 package.json 中添加 "type": "module" 字段:
{
"name": "my-image-project",
"version": "1.0.0",
"description": "Process images with image-js",
"type": "module",
"main": "index.js",
"dependencies": {
"image-js": "^0.39.0"
}
}
⚠️ 注意事项:
- 添加 "type": "module" 后,所有 .js 文件默认按 ES 模块解析,不再支持 require()(若需兼容 CommonJS,可改用 .cjs 扩展名);
- 确保你使用的是 Node.js v12.20+(推荐 v14.13+ 或更高版本),以获得完整的 ESM 支持;
- image-js 本身已发布为原生 ESM 包(同时提供 CJS 兼容入口),因此无需额外构建或转译。
配置完成后,你的代码即可正常运行:
import { Image } from 'image-js';
Image.load('test.png')
.then((img) => {
const grey = img.grey();
return grey.save('grey.png');
})
.catch(console.error);
? 小贴士:若暂不希望全局启用 ESM,也可通过命令行参数临时启用(仅限单次执行):
node --experimental-modules --es-module-specifier-resolution=node index.js
但该方式已被现代 Node.js 版本弃用,强烈建议优先采用 package.json 中 "type": "module" 的标准方案。
总结:import 报错本质是模块系统不匹配问题;只需一行配置,即可安全、简洁、符合规范地使用 image-js 的现代 ES 模块 API。











