【问题标题】:How to import ES Module in a server.js如何在 server.js 中导入 ES 模块
【发布时间】:2021-04-04 20:59:36
【问题描述】:

我不知道在运行 nodemon server.js 时如何解决此错误p>

从“esm”导入esm

在哪里?

package.json

{
  "name": "facebook-back",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "server.js"
  },
  "author": "Ethan",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "gridfs-stream": "^1.1.1",
    "mongoose": "^5.11.8",
    "multer": "^1.4.2",
    "multer-gridfs-storage": "^4.2.0",
    "path": "^0.12.7",
    "pusher": "^4.0.2"
  }
}

终端输出

$ nodemon server.js                                                                             
[nodemon] 2.0.6
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
internal/modules/cjs/loader.js:1149
      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
      ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/ethanding/Desktop/projects/facebook/facebook-back/server.js
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1149:13)
    at Module.load (internal/modules/cjs/loader.js:977:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  code: 'ERR_REQUIRE_ESM'
}
[nodemon] app crashed - waiting for file changes before starting...

server.js

import express from 'express'
import mongoose from 'mongoose'
import cors from 'cors'
import multer from 'multer'
import GridFsStorage from 'multer-gridfs-storage'
import Grid from 'gridfs-stream'
import bodyParser from 'body-parser'
import path from 'path'
import Pusher from 'pusher'

Grid.mongo = mongoose.mongo

// app config
const app = express()
const port = process.env.PORT || 9000

// middlewares
app.use(bodyParser.json())
app.use(cors())

//api routes
app.get('/', (req, res) => res.status(200).send('hello world'))

// listen
app.listen(port, () => console.log(`Listening to port ${port}`))

【问题讨论】:

  • 不清楚是什么问题。您应该提供minimal reproducible example。向我们展示您的 package.json 和终端输出一切都很好,但是您遗漏了您的 JS!你为什么要问nodemon?您是否成功地独立运行了相同的程序并且只遇到了 nodemon 的问题?
  • 你机器上的nodejs版本是什么
  • 很抱歉,现在包含 server.js 文件。我一直在关注一个教程,直到他们使用 nodemon(它在终端中使用的方式)来启动应用程序的后端,但是当我尝试它时给了我这个通知

标签: javascript node.js ecmascript-6 nodemon


【解决方案1】:

如果您编写模块:使用 .mjs

如果不是:您必须使用像 babel、webpack 或 typescript 之类的转译器(我强烈推荐后者)才能使用 emac 模块语法(导入...、导出...)

您可以找到更多信息here

还有 google 是你最好的朋友:NodeJS "Must use import to load ES Module"

还有来自https://github.com/nodejs/node/issues/17063node --experimental-modules apple.mjs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2021-10-13
    • 2019-09-24
    • 1970-01-01
    • 2021-10-30
    • 2021-11-20
    相关资源
    最近更新 更多