gulpjs / gulp

A toolkit to automate & enhance your workflow
https://gulpjs.com
MIT License
33k stars 4.22k forks source link

TypeError: Unknown file extension ".ts" #2810

Open UchihaYuki opened 3 months ago

UchihaYuki commented 3 months ago

Before you open this issue, please complete the following tasks:

What were you expecting to happen?

gulpfile.ts should be able to import packages written in ESM, like del@7

What actually happened?

[19:28:40] Loaded external module: ts-node/register TypeError: Unknown file extension ".ts" for C:\Users\yuki\Desktop\test-gulp\gulpfile.ts

Please give us a sample of your gulpfile

https://github.com/UchihaYuki/gulp-typescript-bug

Terminal output / screenshots

>gulp clean
[19:39:16] Loaded external module: ts-node/register
TypeError: Unknown file extension ".ts" for C:\Users\yuki\Desktop\test-gulp\gulpfile.ts
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:160:9)
    at defaultGetFormat (node:internal/modules/esm/get_format:203:36)
    at defaultLoad (node:internal/modules/esm/load:143:22)
    at async ModuleLoader.load (node:internal/modules/esm/loader:396:7)
    at async ModuleLoader.moduleProvider (node:internal/modules/esm/loader:278:45)
    at async link (node:internal/modules/esm/module_job:78:21) {
  code: 'ERR_UNKNOWN_FILE_EXTENSION'
}

Please provide the following information:

Additional information

UchihaYuki commented 3 months ago

It seems tsx will work, but I don't know how to replace ts-node with tsx. Haven't found any doc online.

UchihaYuki commented 3 months ago

https://www.youtube.com/watch?v=jn370WEIvjs https://github.com/TypeStrong/ts-node/issues/1997

UchihaYuki commented 3 months ago

This seems a pretty complicated issue around running typescript on node. I'm going to transpile gulpfile.ts to js first as a workaround now.

phated commented 3 months ago

The esm loader stuff was immature while we developed the underpinnings to gulp v5, but we plan to explore some different techniques for gulp v6 (which drops older node support).

Currently, transpiling is likely your best option to use a different language+ESM (like you mentioned).

UchihaYuki commented 3 months ago

Is it possible to tell gulp to run npx tsc -p tsconfig.gulp.json before it locate the local gulpfile.js and do its work? I have to do something like this npx tsc -p tsconfig.gulp.json && gulp build currently, which is pretty tedious.

phated commented 3 months ago

You might be able to do something with --preload and then embed the extra flags in a .gulp.js config file, but I'm not sure what that would look like.