Code Monkey home page Code Monkey logo

Comments (17)

michael42 avatar michael42 commented on June 1, 2024 18

Workaround: You can use node --loader ts-node/esm file.ts instead of ts-node --esm file.ts (which causes a ExperimentalWarning: --experimental-loader may be removed in the future). It would be great if ts-node provided an entrypoint that calls register from node:module, which seems to be Node's preferred way of registering loaders, now.

from ts-node.

jetwiwo avatar jetwiwo commented on June 1, 2024 12

Same issue in node v20.10.0 (current LTS)

from ts-node.

mlenkeit avatar mlenkeit commented on June 1, 2024 7

@michael42 thanks for the suggestion. This indeed works with both Node.js 18.18.2 and 18.19.0.

I will, however, hold back with applying that change for now, as this would require changes across a dozen or so repos. We've simply pinned Node.js to 18.18.2 for now to unblock us.

I still consider this to be a bug in ts-node.

from ts-node.

mlenkeit avatar mlenkeit commented on June 1, 2024 5

See #1997 - this sounds like a duplicate of that one.

I agree that #1997 and this one probably share the same root cause.

Yet, I think they differ in their implication: If ts-node changed the way it works on a major version bump of Node.js, I'd say that's acceptable. But if ts-node suddenly stopped working on a minor version bump of Node.js, I'd say it's a bug.

from ts-node.

JonWallsten avatar JonWallsten commented on June 1, 2024 2

Workaround: You can use node --loader ts-node/esm file.ts instead of ts-node --esm file.ts (which causes a ExperimentalWarning: --experimental-loader may be removed in the future). It would be great if ts-node provided an entrypoint that calls register from node:module, which seems to be Node's preferred way of registering loaders, now.

This does not seem to work for me:
node --loader ts-node/esm -r tsconfig-paths/register ./scripts/deploy.ts

(node:129) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("ts-node/esm", pathToFileURL("./"));'
(Use `node --trace-warnings ...` to show where the warning was created)
/builds/ci-vct-dev/aws-platform-ci/aws-cdk/scripts/deploy.ts:1
import { AWS_DOMAIN } from '../shared-lib/src/environment/compile';
^^^^^^

from ts-node.

mlenkeit avatar mlenkeit commented on June 1, 2024 2

Does anyone know which version of node it works on ? Currently have this issue with node 20, running ts-node --esm in a module

@rreeves8 it works on Node.js 18.18.2. To my knowledge, any newer version runs into the problem described here (incl. Node.js 20). For following this kind of problem for Node.js 20, you may want to take a look at #1997 as well.

from ts-node.

kuncevic avatar kuncevic commented on June 1, 2024 2

node --loader ts-node/esm index.ts works for me

from ts-node.

ajvincent avatar ajvincent commented on June 1, 2024 1

See #1997 - this sounds like a duplicate of that one.

from ts-node.

rcollette avatar rcollette commented on June 1, 2024 1

I'm using tsx with AWS CDK until this is resolved.

In cdk.json, change the app property to:

  "app": "npx tsx bin/app.ts",

from ts-node.

jetwiwo avatar jetwiwo commented on June 1, 2024

Workaround: You can use node --loader ts-node/esm file.ts instead of ts-node --esm file.ts (which causes a ExperimentalWarning: --experimental-loader may be removed in the future). It would be great if ts-node provided an entrypoint that calls register from node:module, which seems to be Node's preferred way of registering loaders, now.

This does not seem to work for me: node --loader ts-node/esm -r tsconfig-paths/register ./scripts/deploy.ts

(node:129) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("ts-node/esm", pathToFileURL("./"));'
(Use `node --trace-warnings ...` to show where the warning was created)
/builds/ci-vct-dev/aws-platform-ci/aws-cdk/scripts/deploy.ts:1
import { AWS_DOMAIN } from '../shared-lib/src/environment/compile';
^^^^^^

Make sure you have "type": "module" in package.json or rename the file to file.mts

from ts-node.

mlenkeit avatar mlenkeit commented on June 1, 2024

Same issue in node v20.10.0 (current LTS)

@jetwiwo right, thanks for mentioning that. FWIW, it looks like it doesn't work with Node.js 20 at all. I've added Node.js 20 versions to the repo for reproducing the problem.

image

https://github.com/mlenkeit/ts-node-repro/actions/runs/7125070507

from ts-node.

MythicManiac avatar MythicManiac commented on June 1, 2024

Got bit by this just a few minutes ago as well, would agree with not expecting breaking changes with minor version bumps.

from ts-node.

rreeves8 avatar rreeves8 commented on June 1, 2024

Does anyone know which version of node it works on ? Currently have this issue with node 20, running ts-node --esm in a module

from ts-node.

seemrcola avatar seemrcola commented on June 1, 2024

Workaround: You can use node --loader ts-node/esm file.ts instead of ts-node --esm file.ts (which causes a ExperimentalWarning: --experimental-loader may be removed in the future). It would be great if ts-node provided an entrypoint that calls register from node:module, which seems to be Node's preferred way of registering loaders, now.

This does not seem to work for me: node --loader ts-node/esm -r tsconfig-paths/register ./scripts/deploy.ts

(node:129) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("ts-node/esm", pathToFileURL("./"));'
(Use `node --trace-warnings ...` to show where the warning was created)
/builds/ci-vct-dev/aws-platform-ci/aws-cdk/scripts/deploy.ts:1
import { AWS_DOMAIN } from '../shared-lib/src/environment/compile';
^^^^^^

Make sure you have "type": "module" in package.json or rename the file to file.mts

thanks, it works for me

from ts-node.

mlenkeit avatar mlenkeit commented on June 1, 2024

FWIW, we have decided to switch to tsx, given that there hasn't been any reaction yet from the maintainers of ts-node.

In addition to replacing the dependency itself, we have removed the ts-node config from our tsconfig.json file and also uninstalled any explicit dependencies to swc (if present), as it seems to be the default in tsx.

We struggled a bit to make it work across Node.js versions, given that the --loader and --import options seem to be mutually exclusive, and ended up having dedicated scripts in our package.json.

from ts-node.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.