ChatGPT解决这个技术问题 Extra ChatGPT

Node.js:语法错误:无法在模块外使用 import 语句

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

主.js:

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

mod.js:

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

我怎样才能解决这个问题?谢谢

哪个版本的nodejs?
@gautam1168 v12.16.2

T
Tim Trayler

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

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

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

node --experimental-modules program.js

希望能帮助到你!


注意 - 在提供的代码末尾添加逗号
不为我工作
g
gautam1168

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

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

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

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


r
ro_alli

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

在与您的模块相同的目录中创建一个 package.json 文件并添加 "type":"module"。然后使用导入 {func} from "./myscript.js";。使用节点运行时,导入样式有效。


L
Lekia

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


j
johnnyBoy

我在尝试使用 typescript 运行 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"
  }
}

S
Simone

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


k
kob003

对于浏览器(前端):在脚本标签中添加 type = "module" 即

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

对于 nodejs:在您的 package.json 文件中添加 "type": "module"


S
Snowcat

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

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

这解决了这个问题。