在nodejs中导入文件时遇到问题

Nee*_*van 3 node.js eslint babeljs

我不知道这些扩展名出了什么问题,当我提供扩展名“.js”时,应用程序运行正常,但它在该行发出警告,指出“ ./models/user.js”意外使用文件扩展名“js”。 js",但是当我删除扩展时,整个应用程序崩溃并显示错误 [ERR_MODULE_NOT_FOUND]: 找不到从 F:\React\AuthenticationApp\backend\ 导入的模块 'F:\React\AuthenticationApp\backend\src\models\user' src\index.js,我知道可以在 node.js 中导入文件而不提供扩展名,但我只是知道这是我的代码

    // eslint-disable-next-line no-unused-vars
import express from 'express'
import User from './models/user'

import './db/mongoose'

const app = express()
const port = 4000

app.use(express.json())

app.post('/users', (req, res) => {
  const user = new User(req.body)

  user
    .save()
    .then(() => {
      res.send(user)
      console.log(user)
    })
    .catch((e) => {
      res.status(401).send(e)
    })
})

app.listen(port, () => {
  console.log(`Server is up on ${port}`)
})
Run Code Online (Sandbox Code Playgroud)

这是 package.json

   {
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "type": "module",
  "scripts": {
    "build": "babel ./src --out-dir ./build",
    "start": "nodemon --exec babel-node src/index.js",
    "dev": "nodemon src/index.js",
    "lint": "eslint ."
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/cli": "^7.13.16",
    "@babel/core": "^7.13.16",
    "@babel/node": "^7.13.13",
    "@babel/preset-env": "^7.13.15",
    "@babel/runtime": "^7.13.17",
    "eslint": "^7.25.0",
    "eslint-config-airbnb-base": "^14.2.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-import": "^2.22.1",
    "eslint-plugin-prettier": "^3.4.0",
    "nodemon": "^2.0.7",
    "prettier": "^2.2.1"
  },
  "dependencies": {
    "express": "^4.17.1",
    "mongoose": "^5.12.6",
    "validator": "^13.6.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*ooo 6

使用以下规则调整 eslint 配置:

"rules": {
    "import/extensions": [
        "error",
        {
            "js": "ignorePackages"
        }
    ]
},
Run Code Online (Sandbox Code Playgroud)

该规则的详细说明在此页中。

这样nodejs就会成功运行,eslint就不会显示错误。

CommonJS 模块仍然可以在“require”函数中不进行扩展。
但是,在使用“import”时,您必须指定 ESmodule 的扩展(除了像“some-package”这样的“裸说明符”),这是根据nodejs 文档的。