nodeJS v19 放弃了对 --es-module-specifier-resolution=node 的支持,这使得运行转译的 TypeScript 变得

作者:编程家 分类: typescript 时间:2025-07-20

Node.js v19 放弃了对 --es-module-specifier-resolution=node 的支持,这给运行转译的 TypeScript 带来了更大的困难。

在之前的版本中,我们可以通过设置 --es-module-specifier-resolution=node 来告诉 Node.js 解析模块的方式。这个选项告诉 Node.js 使用 Node.js 的模块解析算法来解析模块路径,而不是按照 ECMAScript 规范来解析。

然而,在 Node.js v19 中,这个选项被废弃了。这意味着当我们使用 TypeScript 来编写代码时,如果我们依赖于这个选项来解析模块路径,那么我们将面临更多的困难。

在这种情况下,我们需要找到一种替代方案来解决这个问题。一种解决方案是使用一些第三方库,比如 ts-node 或者 tsconfig-paths,来帮助我们解决这个问题。这些库可以帮助我们在运行转译的 TypeScript 代码时,正确地解析模块路径。

下面是一个使用 ts-node 的例子:

typescript

import express from 'express';

const app = express();

const port = 3000;

app.get('/', (req, res) => {

res.send('Hello World!');

});

app.listen(port, () => {

console.log(`Server is running on port ${port}`);

});

在这个例子中,我们使用了 ts-node 来运行 TypeScript 代码。ts-node 会在运行时编译我们的 TypeScript 代码,并且会正确地解析模块路径,而不需要依赖于 --es-module-specifier-resolution=node 这个选项。

除了使用第三方库,我们还可以通过修改我们的 TypeScript 配置文件来解决这个问题。我们可以在 tsconfig.json 文件中添加一个 paths 字段,来指定我们的模块路径的别名和对应的实际路径。

下面是一个示例的 tsconfig.json 文件:

json

{

"compilerOptions": {

"moduleResolution": "node",

"baseUrl": "./src",

"paths": {

"@app/*": ["*"]

}

}

}

在这个例子中,我们使用了 paths 字段来指定了一个别名 "@app/*",它对应的实际路径是 "*",也就是所有的模块都可以通过这个别名来引用。这样,当我们在代码中使用 "@app/*" 来引用模块时,TypeScript 会正确地解析模块路径。

Node.js v19 放弃了对 --es-module-specifier-resolution=node 的支持,这给运行转译的 TypeScript 带来了更大的困难。然而,我们可以通过使用一些第三方库或者修改 TypeScript 配置文件来解决这个问题。无论我们选择哪种方法,都需要确保模块路径的正确解析,以保证我们的 TypeScript 代码能够正常运行。