使用cloudinary模块出现无法在模块外使用import语句的SyntaxError报错原因
问题描述
尝试调用cloudinary模块实现图片尺寸调整功能,所用代码如下:
import cloudinary from 'cloudinary'; var cl = new cloudinary.Cloudinary({ cloud_name: "username", secure: true }); new CloudinaryImage("pingu.jpg").resize(scale().width(70).height(53));
运行后得到如下报错信息:
(node:29424) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. (Use `node --trace-warnings ...` to show where the warning was created) c:\Users\...\perspective\cloud.js:1 import cloudinary from 'cloudinary'; ^^^^^^ SyntaxError: Cannot use import statement outside a module at wrapSafe (node:internal/modules/cjs/loader:1018:16) at Module._compile (node:internal/modules/cjs/loader:1066:27) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1131:10) at Module.load (node:internal/modules/cjs/loader:967:32) at Function.Module._load (node:internal/modules/cjs/loader:807:14) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12) at node:internal/main/run_main_module:17:47 [Done] exited with code=1 in 0.183 seconds
咨询该特定报错的具体触发原因。
报错原因
这个报错和cloudinary的功能逻辑无关,是Node.js的模块解析规则直接触发的:
- Node.js默认把后缀为
.js的文件当作CommonJS模块处理,CommonJS规范只支持require()方式导入依赖,不识别ES Module标准的import关键字 - 运行的
cloud.js没有做任何ES模块声明,Node.js按CommonJS规则解析到第一行的import语句时,直接抛出语法错误,提示不能在非ES模块环境下使用import语句 - 报错开头的警告已经明确给出判定依据:要让Node.js识别ES模块语法,要么在项目的package.json里添加
"type": "module"配置,要么把文件后缀改成.mjs,两种方式都能显式告知Node.js按ES Module规范解析对应文件。
额外提示:就算解决了模块规范的问题,当前代码还有逻辑缺失:CloudinaryImage、scale这两个方法没有从cloudinary包中导入,后续运行还会触发变量未定义的错误。
内容的提问来源于stack exchange,提问作者Cinn
相关产品推荐
相关产品推荐

