Мой Express. js сервер в данный момент запускается с помощью start.js
, который, в свою очередь, запускает server.js
(код ниже) . Например,
nodemon start.js
Проблема: Когда я пытаюсь запустить файл на src/lib/seed_database.js
, используя
node seed_database.js
, мы получаем ошибки, показывающие, что babel не передача любых файлов JS, таких как
SyntaxError: неожиданный токен 'export'
Каков рекомендуемый способ заставить babel работать с файлом, отличным от server.js
?
Среда
- Узел 13.7.0
- Ма c OS X 10.15.2
- @ babel / runtime 7.8.4
- @ babel / core 7.8.4
- @ babel / plugin-transform-runtime 7.8.3
- @ babel / preset-env 7.8 .4
- @ babel / register 7.8.3 "
Структура каталогов
my-app
├── .node_modules
├── src
│ ├── lib
│ │ └── seed_database.js
│ ├── v1
│ │ └── routes.js
│ ├── start.js
│ └── server.js
├── .babelrc
├── package-lock.json
├── package.json
start. js
require("@babel/register")({
presets: [
["@babel/preset-env", {
"targets": {
"node": "current"
}
}]
]
});
module.exports = require('./server.js')
сервер. js
import express from 'express';
import v1ApiRoutes from './v1/routes';
import constants from './config/constants';
const app = express();
app.use('/v1', v1ApiRoutes);
app.listen(constants.PORT, err => {
if (err) {
console.log('Cannot run!')
} else {
console.log(`App listening on port: ${constants.PORT}`)
}
});
seed_database. js
const db = require('../../config/db')['appDb'];
...
дБ. js
...
export const appDb = appDb;
.babelr c
{
"plugins": [
["@babel/transform-runtime"]
]
}
Обновление
Предложение Джереми Харриса работает:
require("@babel/register")({
presets: [
["@babel/preset-env", {
"targets": {
"node": "current"
}
}]
]
});
const db = require('../../config/db')['appDb'];
Однако, когда мы заменяем строку require
именованным импортом:
import { appDb as db } from '../../config/db';
, мы получаем новую ошибку
SyntaxError: Невозможно использовать оператор импорта вне модуля
Обновление # 2
Использование второго предложения Джереми Харриса об одной точке входа работает
node start.js seed
start. js
require("@babel/register")({
presets: [
["@babel/preset-env", {
"targets": {
"node": "current"
}
}]
]
});
if (process.argv.indexOf('seed') > -1) {
module.exports = require('./lib/seed_database.js')
return
}
module.exports = require('./server.js')