【发布时间】:2021-09-03 11:13:53
【问题描述】:
当依赖项未声明为模块时,如何从依赖项中解决“无法在模块外使用 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" - 升级到最新版本的节点
- 尝试使用非 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 — 这似乎非常相似,但我在节点中收到此错误,而不是在浏览器中
元数据
- 节点:v16.2.0
- Sveltekit:v1.0.0-next.115
- 验证器:13.6.0
【问题讨论】:
-
您在 package.json 中将
type属性设置为"type": "module"后是否重新启动了编辑器?如果您不重新加载项目,intellisense 不会启动它,所以事情可以正常工作,但 intellisense 不会,所以看起来好像您做错了什么,而实际上您并没有。 -
刚试过,好像没用。这似乎也不是智能感知问题。尝试启动 Sveltekit 时发生错误。
-
你看过类似的post吗?
标签: javascript node.js node-modules package.json npm-package