Javascript 模块 - 无法在模块外部使用 import 语句

Mas*_*oe2 5 javascript

我是 Javascript 新手,我正在尝试从教程中学习模块。在 Visual Studio Code/VScode 中有一个文件夹,其中有两个文件:script.js 和 external.js。

Script.js 从 external.js 导入内容并将文本打印到控制台。当我使用 node.js 运行配置从 vs code 运行 script.js 时,出现以下错误。有人可以告诉我为什么会发生这种情况以及如何解决它吗?相比之下,Java 中的导入很简单。

import {keyValue} from './external.js';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:1070:16)
    at Module._compile (internal/modules/cjs/loader.js:1120:27)
Run Code Online (Sandbox Code Playgroud)

外部.js:

export let keyValue = 1000;
Run Code Online (Sandbox Code Playgroud)

脚本.js:

import {keyValue} from './external.js';
console.log(keyValue);
Run Code Online (Sandbox Code Playgroud)

更新: 节点版本 - v12.16.2,升级到 v14.4.0。

SPG*_*SPG 5

Node.js 的版本是什么?

如果 node.js 版本为 13 或更高版本,您可以执行以下任一操作:

  • 添加{ type: "module" }到 package.json。
{
  ...
  scripts: "...",
  type: "module"
}
Run Code Online (Sandbox Code Playgroud)
  • 重命名.js.mjs

如果它低于 13,则重命名.js.mjs,并使用附加参数运行--experimental-modules

node --experimental-modules script.js
Run Code Online (Sandbox Code Playgroud)

或者

您还可以修复该import statement outside a module问题

不使用 import语句并使用动态导入函数

脚本.js

import("./external.js").then((module) => {
    console.log(module.keyValue);
});
Run Code Online (Sandbox Code Playgroud)

这种形式也支持await关键字。

 let module = await import('./external.js');
 console.log(module.keyValue)
Run Code Online (Sandbox Code Playgroud)