当依赖项未声明为模块时,如何解决“无法在模块外部使用import语句”的问题?
我想在Svelte/kit中使用validator来验证电子邮件。但是,当导入ESM版本时,我会收到“无法在模块外部使用import语句”的错误。我使用的是pnpm而不是npm或yarn。
import isEmail from 'validator/es/lib/isEmail'
/node_modules/.pnpm/validator@13.6.0/node_modules/validator/es/lib/isEmail.js:1
import assertString from './util/assertString';
^^^^^^
SyntaxError: Cannot use import statement outside a module
at Object.compileFunction (node:vm:355:18)
at wrapSafe (node:internal/modules/cjs/loader:1039:15)
at Module._compile (node:internal/modules/cjs/loader:1073:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
at Module.load (node:internal/modules/cjs/loader:989:32)
at Function.Module._load (node:internal/modules/cjs/loader:829:14)
at Module.require (node:internal/modules/cjs/loader:1013:19)
at require (node:internal/modules/cjs/helpers:93:18)
at nodeRequire
看起来验证器正在尝试使用import语句,但它的package.json没有指定"type": "module"
。我猜这是错误的根本原因。
调试步骤
- package.json有
"type": "module"
- 升级到最新版本的node
- 尝试使用validator的非ESM版本
'validator/lib/isEmail'
,但会导致其他与此主题无关的错误。
相关内容
- SyntaxError: Cannot use import statement outside a module - 这个解决方案适用于您控制的代码,而不适用于依赖项
- "Uncaught SyntaxError: Cannot use import statement outside a module" when importing ECMAScript 6 - 这似乎非常相似,但我在node中遇到了这个错误,而不是在浏览器中
元数据
- Node: v16.2.0
- Sveltekit: v1.0.0-next.115
- Validator: 13.6.0
package.json
中的"type": "module"
属性设置后,您是否重新启动了编辑器?如果您不重新加载项目,则智能感知无法识别它,因此可能会出现一些工作正常但智能感知无法使用的情况,这会导致看起来好像您做错了什么,实际上并非如此。 - JΛYDΞV