簡體   English   中英

Node.js:語法錯誤:無法在模塊外使用導入語句

[英]Node.js: SyntaxError: Cannot use import statement outside a module

我收到此錯誤語法錯誤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" }
}

如果您使用的 Node 版本早於 13,則需要在運行程序時使用 --experimental-modules 標志

node --experimental-modules program.js

並在 package.json 中添加 {"type": "module" }

希望能幫助到你 !

使用 commonjs 語法而不是 es 模塊語法:

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

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

否則,如果你想使用 es 模塊,你必須按照 Achraf Ghellach 的回答建議

我最近遇到了這個問題。 此解決方案類似於評分最高的答案,但我發現某些方法對我有用。

在與您的模塊相同的目錄中創建一個 package.json 文件並添加"type":"module" 然后使用 import {func} from "./myscript.js"; . 使用節點運行時,導入樣式有效。

除了上面的答案,請注意默認情況下(如果“type”被省略)“type”是“commonjs”。 因此,當它是“模塊”時,您已經明確指定了類型。 您不能在模塊外使用 import 語句。

我在嘗試使用 typescript 運行 mocha 測試時遇到了這個問題。 這與答案沒有直接關系,但可能會有所幫助。

這篇文章很有趣。 他使用了一個涉及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"

SyntaxError:不能在模塊外使用 import 語句

我遇到了同樣的問題,但在另一個模塊(python-shell)中。 我將代碼替換如下:

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

這解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM