Невозможно использовать оператор импорта за пределами модулей - PullRequest
1 голос
/ 25 февраля 2020

Я использую Next JS с машинописью, mon go Atlas, mon goose, node и express.

При запуске страниц узла / сервера я получаю следующую ошибку: Я загрузил файл пакета. json и добавил также babel

import express из 'express'; ^^^^^^

SyntaxError: Невозможно использовать оператор импорта вне модуля в wrapSafe (внутренний / modules / cjs / loader. js: 1072: 16) в модуле Module._compile (внутренний / modules / cjs) /loader.js:1122:27) в Object.Module._extensions .. js (внутренний / modules / cjs / loader. js: 1178: 10) в Module.load (внутренний / modules / cjs / loader. js: 1002: 32) в Function.Module._load (внутренний / modules / cjs / loader. js: 901: 14) в Function.executeUserEntryPoint [as runMain] (внутренний / modules / run_main. js: 74: 12) at internal / main / run_main_module. js: 18: 47

Это мой сервер. 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');
});
//Saving data to our mongoDB
// const data = {
// title: 'third post',
// body: 'third post'
// };

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": "success",
  "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"
}

Ответы [ 2 ]

3 голосов
/ 25 февраля 2020

Начиная с Node v12, вы можете использовать расширение .mjs или установить "type": "module" в вашем package.json.

И вам нужно запустить узел с флагом - -experimental-modules.

node --experimental-modules server.mjs

Вы можете проверить ссылку SO

Или можете создайте файл .babelrc в root вашего проекта. Добавьте следующие (и любые другие предварительные настройки 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

Now, go в папку где ваш файл server.js существует и

запускается с использованием:

babel-node fileName.js

Или вы можете запустить с помощью npm start, добавив следующий код в ваш файл package.json:

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

Существует учебное пособие ссылка для настройки следующего. js с пользовательским Express Сервером + Typescript на носителе, которое будет очень полезно для вас.

0 голосов
/ 06 апреля 2020

"scripts": {"start": "сервер babel-node. js"}

добавление выше работало для меня

...