Typescript gulpfile.ts与任何导入语句一起失败

Typescript gulpfile.ts与任何导入语句一起失败,typescript,import,gulp,Typescript,Import,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

您希望发生什么事? 在安装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)
...
CLI version: 2.2.0
Local version: 4.0.2
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
如果我tsc my gulpfile.ts,那么gulp可以完美地处理传输的输出。除非我直接给它灌一口,否则它会窒息。如果我的文件包含任何导入语句,则标记我的第一条语句(即使它是注释)

我正在使用来自“gulp”的
import{src,dest,series,parallel}
(参见下面的示例)而不是
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))
ts节点安装在本地。Package.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?

[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)
...
CLI version: 2.2.0
Local version: 4.0.2
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
您使用的是什么版本的npm和node?

[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)
...
CLI version: 2.2.0
Local version: 4.0.2
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

我得到了一个非常类似的错误:

/project/gulpfile.ts:1
import gulp from 'gulp'; // or import * as gulp from 'gulp'
       ^^^^

SyntaxError: Unexpected identifier
出现此错误是因为gulp与
tsconfig.json
文件中
“esnext”
模块值不兼容。在某些情况下,您可以更改或删除此条目,但在使用create react app时,它将在下次运行时覆盖您的编辑

您可以通过向
tsconfig.json
文件添加
ts node
块来指定专门用于ts节点的自定义编译器选项来解决此问题,如:

{
  "compilerOptions": {
    "module": "esnext"
  },
  "ts-node": {
    "compilerOptions": {
      "module": "commonjs"
    }
  }
}

通过此更改,您应该能够通过运行
gulp

来运行
gulpfile.ts
,我以为我已经尝试了所有模块值,但显然没有。谢谢:)不幸的是,不是所有的glup插件都有类型。