NodeJS “不能在模块外使用import语句”,但package.json包含模块类型

smdncfj3  于 2023-03-07  发布在  Node.js
关注(0)|答案(2)|浏览(181)

由于我是javascript新手,所以我使用node JS来访问不同的API。我选择的库是axios。为了确保它能正常工作,我做了这个非常基本的脚本:

  • 索引.js*
console.log("Getting axios")
const axios = require("axios")
console.log("Got it")

但是我在输出中得到了这个

Uncaught SyntaxError C:\Users\<name>\Downloads\PostJs\node_modules\axios\index.js:1
import axios from './lib/axios.js';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Module._compile (<node_internals>/internal/modules/cjs/loader.js:895:18)
    at Module._extensions..js (<node_internals>/internal/modules/cjs/loader.js:995:10)
    at Module.load (<node_internals>/internal/modules/cjs/loader.js:815:32)
    at Module._load (<node_internals>/internal/modules/cjs/loader.js:727:14)
    at Module.require (<node_internals>/internal/modules/cjs/loader.js:852:19)
    at require (<node_internals>/internal/modules/cjs/helpers.js:74:18)
    at <anonymous> (c:\Users\<name>\Downloads\PostJs\index.js:2:15)
    at Module._compile (<node_internals>/internal/modules/cjs/loader.js:959:30)
    at Module._extensions..js (<node_internals>/internal/modules/cjs/loader.js:995:10)
    at Module.load (<node_internals>/internal/modules/cjs/loader.js:815:32)
    at Module._load (<node_internals>/internal/modules/cjs/loader.js:727:14)
    at Module.runMain (<node_internals>/internal/modules/cjs/loader.js:1047:10)
    at <anonymous> (<node_internals>/internal/main/run_main_module.js:17:11)
  • 当然我把名字换成了<name>,因为我不想欺骗自己 *

无论如何,快速搜索告诉我去我的package.json文件,并添加"type": "module"到它,我这样做得到这个:
package.json

{
  "name": "postjs",
  "type": "module",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "axios": "^1.3.4"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

但是什么都没有改变。我想我做了我应该做的一切,但是现在我不知所措。为什么会这样?
如果有帮助的话,下面是我的文件资源管理器的样子:

svdrlsy4

svdrlsy41#

我检查了我的Node JS版本,我正在使用Node V12。我下载了最新的(稳定的)发行版,它工作得很好!

wlzqhblo

wlzqhblo2#

这里的问题是您将CommonJS模块与ES模块混合在一起。require是CommonJS导入模块的方式,而import是ES6导入模块的方式。
由于您已设置“类型”:“module”,则应使用import而不是require。
下面是修改index.js文件以使用import而不是require的方法:

console.log("Getting axios")
import axios from "axios"
console.log("Got it")

注意,使用ES模块时,需要在导入模块时指定文件扩展名(在本例中为.js)。

相关问题