NodeJS 节点. js:语法错误:不能在模块外部使用import语句

r3i60tvu  于 2022-12-29  发布在  Node.js
关注(0)|答案(8)|浏览(318)

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

我该怎么做?谢谢

e5nszbig

e5nszbig1#

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

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

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

node --experimental-modules program.js
kd3sttzy

kd3sttzy2#

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

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

以及

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

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

nfg76nw0

nfg76nw03#

我最近遇到了这个问题。这个解决方案类似于评分最高的答案,但我发现有些方法对我很有效。
在你的模块所在的目录下创建一个package.json文件并添加"type":"module"。然后使用import {func} from "./myscript.js";。当使用node运行时,import风格有效。

wyyhbhjk

wyyhbhjk4#

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

tp5buhyn

tp5buhyn5#

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

vaj7vani

vaj7vani6#

对于浏览器(前端):在script标记内添加type =“module”,即

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

对于节点j:在package.json文件中添加"type": "module"

oxalkeyp

oxalkeyp7#

我在尝试用 typescript 运行摩卡测试时遇到了这个问题。这与答案没有直接关系,但可能会有所帮助。
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"
  }
}
s8vozzvw

s8vozzvw8#

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

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

这就解决了问题。

相关问题