javascript - 语法错误 : Cannot use import statement outside a module (from dependency)

标签 javascript node.js node-modules package.json npm-package

当依赖项未声明为模块时,如何从依赖项中解决“无法在模块外使用 import 语句”?

我想使用 validator在 Svelte/kit 中验证电子邮件。但是,在导入 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
  • 尝试使用非 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
  • 验证器:13.6.0
  • 最佳答案

    你试过这样导入吗?

    import validator from 'validator'
    
    我尝试使用最新的 SvelteKit 重现您的问题。这工作正常:
    // index.svelte
    <script>
        import validator from 'validator';
        let result = validator.isEmail('foo@bar.com');
        console.log(result);
    </script>
    
    当我将导入语句更改为:
    import validator from 'validator/es/lib/isEmail'
    
    我从你的问题中得到了错误(不能在模块外使用 import 语句)。
    进口 validator/es/lib/isEmail据说只导入库的一个子集。我不确定它会有多大的不同。它可能没有任何区别。稍大的构建击败了不起作用的构建。我建议先让它工作,然后如果你真的需要优化构建大小。

    关于javascript - 语法错误 : Cannot use import statement outside a module (from dependency),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68039848/

    相关文章:

    node.js - 如何获取安装我的 npm 模块的项目的根目录?

    javascript - 在 sticky.js 中添加 fadeOut。

    javascript - javascript window.print() 的 Safari 打印问题

    javascript - 如何从 Node.js 中的 URL 加载外部 js 脚本

    javascript - 一直在onclick中 react 调用函数

    javascript - ESM 模块的快速验证器用法

    javascript - 验证在 JavaScript 中设置为 JSON 的电子邮件扩展列表

    javascript - npm install 找不到新版本

    JavaScript:读取文件后尝试返回字符串时未定义类型

    node.js - 找不到模块 'webpack/lib/web/FetchCompileWasmTemplatePlugin'