Node.js: SyntaxError: Cannot use import statement outside a module

Node.js: SyntaxError: Cannot use import statement outside a module

我在尝试从另一个 javascript 文件导入时收到此错误 SyntaxError: Cannot use import statement outside a module。这是我第一次尝试这样的事情。主文件是main.js,模块文件是mod.js.

main.js:

import * as myModule from "mod";
myModule.func();

mod.js:

export function func(){
    console.log("Hello World");
}

我该如何解决这个问题?谢谢

为了使用导入语法 (ESModules),您需要将以下内容添加到您的 package.json 顶层:

{
    // ...
    "type": "module"
}

如果您使用的 Node 版本早于 13,则在 运行 程序时还需要使用 --experimental-modules 标志:

node --experimental-modules program.js

希望对您有所帮助!

使用 commonjs 语法而不是 es 模块语法:

module.exports.func = function (){
    console.log("Hello World");
}

const myMod = require("./mod")
myMod.func()

否则,如果你想使用 es 模块,你必须按照 Achraf Ghellach 的建议去做

除了上面的答案,请注意默认情况下(如果省略“type”)“type”是“commonjs”。因此,当它是“模块”时,您已经明确指定了类型。您不能在模块外使用 import 语句。

我最近遇到了这个问题。此解决方案类似于评分最高的答案,但我发现有一些方法对我有用。

在与您的模块相同的目录中 创建 一个 package.json 文件并添加 "type":"module"。然后使用 import {func} from "./myscript.js";。当 运行 使用 node.

时,导入样式有效

我在尝试使用打字稿 运行 mocha 测试时遇到了这个问题。这与答案没有直接关系,但可能会有所帮助。

This article 挺有意思的。他使用了一个涉及 cross-env 的技巧,允许他 运行 测试 commonjs 模块类型。这对我有用。

// package.json
{
  ...
  "scripts": {
    "test": "cross-env TS_NODE_COMPILER_OPTIONS='{ \"module\": \"commonjs\" }' mocha -r ts-node/register -r src/**/*.spec.ts"
  }
}

如果您在浏览器中(而不是 Node 环境),请确保在 script 标记中指定 type="module" 属性。如果要使用Babel,那么必须是type="text/babel" data-plugins="transform-es2015-modules-umd" data-type="module".

我遇到了同样的问题,但在另一个模块 (python-shell) 中。 我将代码替换如下:

import {PythonShell} from 'python-shell'; (original code)
let {PythonShell} = require('python-shell')

问题解决了。

对于浏览器(前端): 在您的 script 标签内添加 type = "module" 即

<script src="main.js" type="module"></script>

对于 nodejs: 在您的 package.json 文件

中添加 "type": "module"