Я обслуживаю приложение через Express, для которого необходимо использовать ES-модули. Узел допускает это, но мне пришлось заменить __dirname другим решением:
server.m js:
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
Это привело к ошибке с Babel, что потребовало от меня добавить дополнительные плагин (https://babeljs.io/docs/en/next/babel-plugin-syntax-import-meta.html). Я заменил оригинальный CRA на пользовательский веб-пакет и создал .babelr c:
{
"presets": ["@babel/preset-env", "@babel/preset-react"],
"plugins": ["@babel/plugin-syntax-import-meta"]
}
webpack.config. js:
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
entry: "./src/index.js", // entry point to the application = top react component,
output: {
path: path.resolve(__dirname, "build"), // path where the transformed index.js will be stored
filename: "index_bundle.js", //name of the transformed file
},
module: {
rules: [
{
test: /\.(js|mjs|jsx)$/, use: {
loader: 'babel-loader',
}
}, // what files will be loaded by what procedure
{test: /\.css$/, use: ['style-loader', 'css-loader']},
{
test: /\.(png|jpe?g|gif)$/i,
use: [
{
loader: 'file-loader',
},
],
},
]
},
mode: "development",
plugins: [
new HtmlWebpackPlugin({
template: "./public/index.html" // will take the template file and transform it to include the rest
}),
]
};
Я все еще сталкиваюсь с ошибкой при попытке построить приложение. Похоже, что все остальные файлы успешно созданы, но server.m js по-прежнему возвращает ошибку:
ERROR in ./src/server/server.mjs 9:66
Module parse failed: Unexpected token (9:66)
File was processed with these loaders:
* ./node_modules/babel-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
| import getInitialPlayerStates from "../components/functions/initialStateFunctions.mjs";
|
> var __dirname = path.resolve(path.dirname(decodeURI(new URL(import.meta.url).pathname)));
|
| var port = process.env.PORT || 4001;
@ ./src/App.js 49:0-48 119:14-27
@ ./src/index.js
Другие файлы .m js находятся в процессе сборки, если я не включил строку с импортом. мета в их коде - чем они тоже терпят неудачу.
Что не так? Как я могу преодолеть эту проблему?