我在尝试从另一个 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");
}
我怎样才能解决这个问题?谢谢
为了使用导入语法(ESModules),您需要在顶层的 package.json 中添加以下内容:
{
// ...
"type": "module"
}
如果您使用的是早于 13 的 Node 版本,则在运行程序时还需要使用 --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 的回答建议
我最近遇到了这个问题。此解决方案类似于评分最高的答案,但我发现某些方法对我有用。
在与您的模块相同的目录中创建一个 package.json 文件并添加 "type":"module"
。然后使用导入 {func} from "./myscript.js";
。使用节点运行时,导入样式有效。
除了上面的答案,请注意默认情况下(如果“type”被省略)“type”是“commonjs”。因此,当它是“模块”时,您已经明确指定了类型。您不能在模块外使用 import 语句。
我在尝试使用 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"
}
}
如果您在浏览器中(而不是 Node 环境),请确保在 script
标记中指定 type="module"
属性。如果你想使用 Babel,那么它必须是 type="text/babel" data-plugins="transform-es2015-modules-umd" data-type="module"
。
对于浏览器(前端):在脚本标签中添加 type = "module" 即
<script src="main.js" type="module"></script>
对于 nodejs:在您的 package.json 文件中添加 "type": "module"
我遇到了同样的问题,但在另一个模块(python-shell)中。我将代码替换如下:
import {PythonShell} from 'python-shell'; (original code)
let {PythonShell} = require('python-shell')
这解决了这个问题。