gulpfile.ts завершается ошибкой с любым оператором импорта - PullRequest
0 голосов
/ 30 марта 2020

Чего вы ожидали? обычная операция gulp, когда вы получили файл .ts при установке ts-узла

Что на самом деле произошло?

[10:24:59] Requiring external module ts-node/register
.\gulpfile.ts:3
import { __awaiter, __generator, __read, __spread } from "tslib";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Module._compile (internal/modules/cjs/loader.js:891:18)
...

если я ts c мой gulpfile.ts, то gulp может отлично обработать переданный вывод. Только если я прямо дам глоток gulpfile.ts, что он задыхается. Отмечает мое первое утверждение (даже если это комментарий), если мой файл содержит какие-либо операторы импорта.

Я использую import { src, dest, series, parallel } from 'gulp'; (см. Пример ниже) вместо const { src, dest, series, parallel } = require('gulp');, потому что require () - это тип без типа nodejs функция (string) => any, теряющая всю информацию о наборе. Я могу иметь все виды ошибок типов в моем gulpfile, не будучи обнаруженным, побеждая цель записи его в TS.

С инструкциями импорта ниже, VSCode мгновенно обнаруживает мою ошибку:

      src(srcFiles)
        .pipe<NodeJS.ReadWriteStream>(newer({dest: home, ext: '.js'}))
        .pipe<NodeJS.ReadWriteStream>(sourcemaps.init())
        .pipe<NodeJS.ReadWriteStream>(ts({
          lib: ['es2016', 'dom']
          , removeComments: true
        }))
        .pipe(uglify)
        .pipe<NodeJS.ReadWriteStream>(sourcemaps.write('.')) // sourcemap as separate file
        .pipe(dest(home))

но не печатая, мне потребовалась неделя, чтобы заметить, где я ошибся.

На самом деле, если бы я изменил все операторы require() на правильно напечатанные операторы import, то мне не пришлось бы вводить вручную введите pipe<T>(), чтобы они правильно проверили тип.

Я пробовал много разных комбинаций значений для этого tsconfig. json опции:

  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "module": "esnext",
    "moduleResolution": "node",
  }

установлен ts-узел на местном уровне. Пакет. json:

  "devDependencies": {
    "ts-node": "8.8.1",
    "tslib": "^1.11.1",
    "typescript": "^3.8.3"
  }

Единственный выход - использовать gulp для переноса моих gulpfile.ts в gulpfile. js и запустить второй gulp для обработки вывода. Но это звучит очень сложно.

Пожалуйста, опубликуйте образец вашего gulpfile (желательно уменьшенный до того, что он не работает) gulpfile.ts:

import { src, dest, series, parallel } from 'gulp';
import * as uglify from 'gulp-uglify';

Какую версию gulp вы используете?

CLI version: 2.2.0
Local version: 4.0.2

Какие версии npm и узел вы используете?

yarn -v
1.22.4

ts-node -v
ts-node v3.3.0
node v12.15.0
typescript v2.5.3

npm -v
6.7.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...