SyntaxError: неожиданный импорт токена - Node.js

Я пытаюсь разделить код моего приложения с помощью веб-пакета, но веб-пакет не создает фрагменты для моего динамического импорта. Я нашел один источник здесь: https://davidea.st/articles/webpack-typescript-code-split-wont-work который сказал, что мне нужно изменить свойство моего модуля в моем файле tsconfig с "commonjs" на "esnext", так что компилятор машинописного текста не уменьшит мои динамические операторы импорта до Promises, в результате чего Webpack не будет знать, что они являются динамическими импортами, и, следовательно, не будет создавать динамические фрагменты. Я следовал за этим, и во время компиляции я вижу, что куски сейчас создаются! Whoooo! Однако компилятор выдает ошибку с ошибкой в ​​заголовке моего вопроса, когда пытается разрешить операторы импорта в моем приложении Express, поскольку импорт ES не сводится к тому, что узел больше не понимает. Кто-нибудь знает, возможно ли это достичь? Я хочу использовать операторы импорта ES в узле, но без свойства модуля в моем файле tsconfig, установленного на "commonjs". Я действительно не хочу реорганизовывать все операторы импорта в commonJS require.

tsconfig.json:

{
    "compilerOptions": {
        "target": "es6",
        "module": "esnext",
        "allowJs": true,
        "sourceMap": false,
        "inlineSourceMap": true,
        "strict": true,
        "strictNullChecks": true,
        "noImplicitAny": true,
        "noImplicitReturns": true,
        "noEmitOnError": true,
        "removeComments": false,
        "forceConsistentCasingInFileNames": true,
        "suppressImplicitAnyIndexErrors": false,
        "jsx": "react",
        "watch": false,
        "moduleResolution": "node"
}}

версия узла: v8.11.3

Я использую ts-node в моем скрипте npm для выполнения кода моего сервера:

"start": "webpack && ts-node -./src/service/index.ts --env=prod"

Мой.babelrc выглядит следующим образом:

{
    "presets": [
    "react",
    "stage-3",
    [
      "env",
      {
        "modules": false
      }
    ]
  ],
  "plugins": [
    "react-hot-loader/babel",
    "syntax-dynamic-import"
  ]
}

1 ответ

Решение

По умолчанию, ts-node использует параметры компилятора в tsconfig.json файл в рабочем каталоге; Вы можете указать другой tsconfig.json файл с --project вариант. tsconfig.json файл, который вы используете с ts-node должен иметь module установлен в commonjs (или опущено, в этом случае ts-node по умолчанию это commonjs) для того, чтобы компиляция на лету генерировала модули, понятные Node. Возможно, вам придется использовать отдельные tsconfig.json файлы для кода сервера, с которым вы работаете ts-node и код клиента, который вы упаковываете с помощью Webpack.

Другие вопросы по тегам