不能在模块外使用 import 语句

新手上路,请多包涵

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

运行节点页面/服务器时出现以下错误:我已上传 package.json 文件并添加了 babel

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

SyntaxError:无法在 Object.Module 的 Module._compile (internal/modules/cjs/loader.js:1122:27) 的 wrapSafe (internal/modules/cjs/loader.js:1072:16) 的模块外使用 import 语句。 _extensions..js (internal/modules/cjs/loader.js:1178:10) 在 Module.load (internal/modules/cjs/loader.js:1002:32) 在 Function.Module._load (internal/modules/cjs /loader.js:901:14) 在 Function.executeUserEntryPoint [as 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}`));

包.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"
}

原文由 EverydayDeveloper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 835
2 个回答

从 Node v12 开始,您可以在 — 中使用 .mjs 扩展或设置 "type": "module" package.json

您需要使用 -experimental-modules 标志运行节点。

 node --experimental-modules server.mjs

您可以查看 SO 链接

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

 {
    "presets": ["env"]
}

安装 babel-preset-env 使用

npm install babel-preset-env
npm install babel-cli -g

# OR

yarn add babel-preset-env
yarn global add babel-cli

现在,转到您的 server.js 文件所在的文件夹,然后

运行使用:

 babel-node fileName.js

或者您可以通过将以下代码添加到您的 package.json 文件来使用 npm start 运行:

 "scripts": {
    "start": "babel-node server.js"
}

有一个使用 Custom Express Server + Typescript 在媒体上设置 Next.js 的教程 链接,这对您非常有帮助。

原文由 Deep Kakkar 发布,翻译遵循 CC BY-SA 4.0 许可协议

以下解决方案对我有用;

  • 安装需要的包

npm install 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 是您的文件。

希望这有效:)

原文由 Mekky_Mayata 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏