Фон
Допустим, у вас есть компонент ES2015 / ES6 с одной функцией в качестве экспорта по умолчанию:
component.js
export default function() {
console.log("Hello, World!");
}
Приложение для включения в:
app.js
import myComponent from "./component"
myComponent();
и сервер Node.js / Express, использующий webpack-dev-middleware , для запуска Webpack (с Babel) и подачи app.js
, а также также , включая component.js
в:
server.js
const express = require("express");
const app = express();
// start the server
app.listen(process.env.EXPRESS_PORT, () => {
console.log(`App listening on port ${process.env.EXPRESS_PORT}!`);
});
const webpack = require("webpack");
const webpackConfig = require("./webpack.config");
const compiler = webpack(webpackConfig);
// use webpack-dev-middleware to serve the publicPath
app.use(
require("webpack-dev-middleware")(compiler, {
logLevel: "warn",
publicPath: webpackConfig.output.publicPath,
})
);
// use webpack-hot-middleware for HMR
app.use(require("webpack-hot-middleware")(compiler));
const myComponent = require("./component") // import the component
myComponent(); // use the component
Вопрос
Как вы можете использовать component.js
как в server.js
, так и в веб-упаковке app.js
?
Проблема
Как есть, этот компонент прекрасно работает в app.js
, но выдает SyntaxError: Unexpected token export
в консоли Node при попытке сделать const component = require("./component")
.
Так как Babel работает только через Webpack, а server.js
получает доступ к component.js
через оригинальный компонент, а не в комплекте / передается, мы получаем ошибку.
Полагаю, решением было бы запустить Babel дважды: один раз на компоненте до запуска server.js
, и еще раз в Webpack, но это кажется очень неэлегичным и неэффективным.