Ошибка разбора модуля: неожиданный токен (9:37) с загрузчиком babel - PullRequest
0 голосов
/ 30 марта 2020

Я обслуживаю приложение через 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 находятся в процессе сборки, если я не включил строку с импортом. мета в их коде - чем они тоже терпят неудачу.

Что не так? Как я могу преодолеть эту проблему?

1 Ответ

0 голосов
/ 31 марта 2020

Библиотека "es-dirname" решает проблему без использования "import.meta".

https://www.npmjs.com/package/es-dirname

...