babel-node: Синтаксическая ошибка: неожиданный импорт токена с использованием node.js

#javascript #node.js #babeljs

#javascript #node.js #babeljs

Вопрос:

Я пытаюсь запустить приложение node express на своем локальном компьютере для целей тестирования, используя babel-node для переноса на лету. Я создал server.js файл точки входа, который содержит следующий код:

 require("@babel/register")();

// Import the rest of our application.
module.exports = require('./bin/www');
  

Вот моя запись скриптов package.json для запуска приложения:

 "testLocal": "nodemon --verbose --exec babel-node server.js --inspect=0.0.0.0:56746"
  

и я добавил файл .babelrc в корень проекта со следующим кодом:

 {
  "presets": ["@babel/preset-env"]
}
  

Проблема в том, что я продолжаю получать следующую ошибку:

 import cluster from 'cluster';
^^^^^^

SyntaxError: Unexpected token import
  

Вот пакет из моего файла package-json, некоторые я удалил, чтобы сократить код до минимального примера:

 "@babel/core": "^7.11.6",
"@babel/node": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.11.0",
"@babel/plugin-transform-async-to-generator": "^7.12.1",
"@babel/plugin-transform-modules-commonjs": "^7.4.4",
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/polyfill": "^7.11.5",
"@babel/preset-env": "^7.12.1",
"@babel/register": "^7.11.5",
  

Я нашел этот пример в нескольких разных статьях, но, похоже, он не переносится. Я использую babel-node на своем локальном компьютере, чтобы я мог выполнять перенос на лету. Чего мне не хватает в этой настройке, что может вызвать эту проблему?

Комментарии:

1. попробуйте babel-node ./bin/www не server.js

Ответ №1:

Это мой package.json , который я использую cross-env для обработки env, вы можете использовать dotenv … и pino и pino-pretty для журналов.

 "scripts": {
    "nobuildprod": "pm2 startOrRestart ecosystem.config.js --env production",
    "dev": "./node_modules/.bin/cross-env NODE_ENV=development ./node_modules/.bin/nodemon --exec ./node_modules/.bin/babel-node --trace-warnings src/index.js  | pino-pretty",
    "build": "./node_modules/.bin/babel src --out-dir ./dist --source-maps --copy-files",

  ...

  "dependencies": {
    "@babel/runtime": "^7.11.2",
    "pino": "^6.7.0",
    "pino-http": "^5.3.0",
    "pino-pretty": "^4.3.0",
  
  ...


  "devDependencies": {
    "@babel/cli": "^7.11.6",
    "@babel/core": "^7.11.6",
    "@babel/node": "^7.10.5",
    "@babel/plugin-proposal-decorators": "^7.10.5",
    "@babel/plugin-transform-runtime": "^7.11.5",
    "@babel/preset-env": "^7.11.5",
    "@babel/register": "^7.11.5",
  

server.js

 require('@babel/register');
require('./src/index.js');
  

.babelrc (я использую декораторы)

 {
    "presets": [
        ["@babel/preset-env"]
    ],
    "plugins": [
        ["@babel/transform-runtime"],
        ["@babel/plugin-proposal-decorators", {"legacy" : true}]
    ],
    "env": {
        "development": {
          "sourceMaps": true,
          "retainLines": true
        }
    }
}
  

и ecosystem.config.js

 module.exports = {
  apps: [
    {
      name: 'myapp',
      script: 'server.js',
      instances: 'max',
      env: {
        NODE_ENV: 'development',
      },
      env_development: {
        NODE_ENV: 'development',
      },
      env_test: {
        NODE_ENV: 'test',
      },
      env_production: {
        NODE_ENV: 'production',
      },
    },
  ],
};
  

итак, мои исходные файлы находятся в ./src
Я могу запустить это приложение для разработчиков, для производства с использованием pm2, а также для создания easy docker.
Я надеюсь, что это будет полезно для вас.

Комментарии:

1. Я все еще получаю это, хотя мне действительно нравится ваш подход. Я перехожу на pm2 из Docker. Отладка в Docker — это боль. Используете ли вы какие-либо операторы импорта в своем index.js досье?

2. Вход в docker — это не проблема, просто используйте docker logs -f <conrainerName or ID> «Да, я использую BABEL!»

3. @user1790300 какова ваша nodejs версия?