#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
версия?