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

问题描述 投票:0回答:9

尝试从另一个 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");
}

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

javascript node.js import export
9个回答
160
投票

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

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

如果您使用的 Node 版本早于 13,则在运行程序时还需要使用

--experimental-modules
标志:

node --experimental-modules program.js

33
投票

使用commonjs语法代替es模块语法:

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

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

否则,如果你想使用 es 模块,你必须按照 Achraf Ghellach 的建议进行操作


7
投票

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

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

对于nodejs: 在您的

package.json
文件中添加 "type": "module"

{
  "name": "",
  "version": "",
  "description": "",
  "main": "",
  "type": "module",
   ....
}

4
投票

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

在与模块相同的目录中创建一个package.json文件并添加

"type":"module"
。然后使用导入
{func} from "./myscript.js";
。使用节点运行时导入样式有效。


1
投票

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


1
投票

如果您在浏览器中(而不是 Node 环境),请确保在

type="module"
标记中指定
script
属性。如果你想使用Babel,那么它必须是
type="text/babel" data-plugins="transform-es2015-modules-umd" data-type="module"


1
投票

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

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

问题就解决了。


0
投票

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

这篇文章很有趣。他使用了一个涉及

cross-env
的技巧,这允许他以 commonjs 模块类型运行测试。这对我有用。

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

0
投票

您可以通过

node --experimental-modules
运行js脚本,而无需更改
package.json
,如下所示:

node --experimental-modules ./path/to/your/js/script.mjs

请注意,您需要将脚本扩展名更改为

.mjs
,否则会出现
SyntaxError: Cannot use import statement outside a module
错误。

© www.soinside.com 2019 - 2024. All rights reserved.