Невозможно использовать оператор импорта вне модуля с настроенным Babel - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь использовать импорт из ES6 с Express Node.js. Я знаю, что Node.js поддерживает только Common JS, поэтому я настроил Babel с Webpack 4, например:

{
      test: /\.m?js$/,
      exclude: ['/node_modules/', /\bcore-js\b/, /\bwebpack\/buildin\b/, /@babel\/runtime-corejs3/],
      use: {
        loader: 'babel-loader',
        options: {
          babelrc : false,
          sourceType : "unambiguous",
          presets : [
            ["@babel/preset-env", {
              modules : false,
              useBuiltIns : "usage",
              corejs : {
                version : "2", 
              }
            }]
          ],
        }
      }
    },

В качестве теста, чтобы увидеть, работает ли он, я обновил свой Common JS require в ES6 import s, например:

import express from "express"
import api from "api/v1/index.api.js"

const expressRouter = express.Router();

expressRouter.get('/', async function (req, res)  {
});

export default expressRouter

Я считаю, что после того, как прочитал эту статью , все вышеперечисленное должно работать. Но при сборке я все еще получаю следующую ошибку:

import express from «express»

^^^^^^

SyntaxError: Невозможно использовать оператор импорта вне модуля

Мой babel-loader не работает или возникает какая-то другая проблема? Во-первых, не все мои файлы используют импорт ES6 - некоторые до сих пор используют операторы Common JS require. Я подумал, что буду пробовать его с одним файлом за раз, чтобы убедиться, что он работает, но, к сожалению, это не так.

Есть идеи, что посмотреть? Я использую core-js 2.6.11, потому что версия 3 вызывает проблемы с mini-css-extract-plugin

1 Ответ

1 голос
/ 30 мая 2020

@ babel / plugin-transform-modules-common js действительно сработал для меня, где мне нужно было использовать какую-то общую js lib для настройки тестовой инфраструктуры. Обратите внимание, чтобы добавить его в babel.config. js

...