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"
我在尝试从另一个 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"