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 的例子:typescriptimport 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 代码能够正常运行。