Node.js 无法在模块外部使用导入语句

Node.js 无法在模块外部使用导入语句,node.js,mongodb,typescript,express,next.js,Node.js,Mongodb,Typescript,Express,Next.js,我将NextJS与typescript、mongo Atlas、mongoose、node和express一起使用 运行节点页/服务器时,我遇到以下错误: 我已经上传了package.json文件,还添加了babel 从“快递”进口快递^^^^^^ SyntaxError:无法在模块外部使用导入语句 在wrapSafe(内部/modules/cjs/loader.js:1072:16) at模块编译(内部/modules/cjs/loader.js:1122:27) at Object.Modu

我将NextJS与typescript、mongo Atlas、mongoose、node和express一起使用

运行节点页/服务器时,我遇到以下错误: 我已经上传了package.json文件,还添加了babel

从“快递”进口快递^^^^^^

SyntaxError:无法在模块外部使用导入语句 在wrapSafe(内部/modules/cjs/loader.js:1072:16) at模块编译(内部/modules/cjs/loader.js:1122:27) at Object.Module._extensions..js(internal/modules/cjs/loader.js:1178:10) at Module.load(内部/modules/cjs/loader.js:1002:32) at Function.Module._load(内部/modules/cjs/loader.js:901:14) 在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12) 在internal/main/run_main_module.js:18:47

这是我的server.js代码:

import express from 'express';
import { connect, connection } from 'mongoose';
import morgan from 'morgan';
import path from 'path';
const app = express();
const PORT = process.env.PORT || 8080;
//Success
   import routes from './routes/api.tsx';

const MONGODB_URI = 'xxx';

// const routes=require('./routes/api')
connect(MONGODB_URI ||'mongodb://localhost/success', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

connection.on('connected', () => {
    console.log('Mongoose is connected');
});

const newBlogPost = new BlogPost(data); //instance of the model

app.use(morgan('tiny'));
app.use('/',routes)

app.listen(PORT, console.log(`Server is starting at ${PORT}`));
package.json文件

{
  "name": "la-sheild",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "next",
    "build": "next build",
    "start": "babel-node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@types/express": "^4.17.2",
    "@types/mongoose": "^5.7.1",
    "axios": "^0.19.2",
    "concurrently": "^5.1.0",
    "express": "^4.17.1",
    "mongoose": "^5.9.1",
    "morgan": "^1.9.1",
    "next": "^9.2.2",
    "node": "^13.8.0",
    "react": "^16.12.0",
    "react-dom": "^16.12.0"
  },
  "devDependencies": {
    "@babel/core": "^7.8.4",
    "@babel/preset-env": "^7.8.4",
    "@babel/register": "^7.8.3",
    "@types/node": "^13.7.4",
    "@types/react": "^16.9.21",
    "babel-cli": "^6.26.0",
    "typescript": "^3.7.5"
  },
  "proxy": "http://localhost:8080"
}

从节点v12开始,您可以使用
.mjs
扩展名,也可以在
包.json
中设置
“type”:“module”

您需要使用-
-experimentalmodules
标志运行节点

节点——实验模块服务器.mjs
你可以查一下

或者,您可以在项目的根目录中创建
.babelrc
文件。 添加以下内容(以及您需要的任何其他巴别塔预设,可以添加到此文件中):

使用安装babel预设环境

npm安装巴别塔预设环境
npm安装babel cli-g
#或
纱线添加巴别塔预设环境
纱线全球添加巴别塔cli
现在,转到您的
server.js
文件所在的文件夹并

运行时使用:

babel节点fileName.js
或者,您可以使用npm start运行,方法是将以下代码添加到
package.json
文件中:

"scripts": {
    "start": "babel-node server.js"
}
有一个教程介绍如何在介质上设置Next.js和自定义的Express Server+Typescript,这将对您非常有帮助

“脚本”:{ “开始”:“babel node server.js” }


添加以上内容对我有效

以下解决方案对我有效

  • 安装所需的软件包

    npm安装nodemon@babel/core@babel/node@babel/preset env-D

  • 在工作目录中创建一个.babelrc文件,并在其中粘贴以下内容

    {
    "presets": [
    "@babel/preset-env" ]
    }
    
    
  • 最后,将下面的代码添加到package.json中的
    “scripts”

    “dev”:“nodemon-exec babel node server.js”
    其中,server.js是本例中的文件


希望这能奏效:)

以下是基于的解决方案

为express创建另一个配置文件,因为节点正在使用common.js模块,但如果您检查
tsconfig.json
,您将看到以下内容:
“模块”:“esnext”

tsconfig.server.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "module": "commonjs",
    "outDir": "dist",
    "noEmit": false
  },
  "include": ["server"]
}
按如下方式设置脚本:

 "start": "ts-node --project tsconfig.server.json server.ts"
我首先添加了tye:module,但仍然面临另一个错误。最后,它对我的工作问题是,我正在运行我的Driver.js文件,这就是为什么我会遇到这个问题。我运行我的Driver.ts文件,它的工作对我来说没问题。

但是在使用extension.ts文件运行my之后,它的工作就完成了。

您安装了express吗?i、 e.package.json文件中是否存在express?是的,它是:“依赖项”:{“@types/express”:“^4.17.2”,“@types/mongoose”:“^5.7.1”,“axios”:“^0.19.2”,“并发”:“^5.1.0”,“express”:“^4.17.1”,@deepkakkar您是否启用了ES6导入?能否共享您的package.json文件?我没有webpack.config.jsfile@Rebel这里有一个关于babel的教程,谢谢你写这篇关于babel的文章。其他每一件事都是关于在package.json中添加“type”:“module”,这不是解决方案babel的步骤对我有效!这对我有效。
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "module": "commonjs",
    "outDir": "dist",
    "noEmit": false
  },
  "include": ["server"]
}
 "start": "ts-node --project tsconfig.server.json server.ts"