gpt4 book ai didi

node.js - 如何使用 NodeJS 13 和 Typescript 3.8 导入 esm 模块?

转载 作者:行者123 更新时间:2023-12-03 20:54:05 28 4
gpt4 key购买 nike

我在 NodeJS 中的一些导入有问题。我想使用 Typescript 3.8 的新功能,比如私有(private)字段:#myPrivateField

我不知道如何在类里面正确导入模块“typescript”。我尝试了很多选择,但无法解决我的问题。

我的文件 :

包.json

{
"name": "test",
"scripts": {
"start": "tsc && node --experimental-modules --es-module-specifier-resolution=node main.js"
},
"dependencies": {
"@types/node": "^13.13.2",
"app-root-path": "^3.0.0",
"fs-extra": "^9.0.0",
"tsutils": "^3.17.1"
},
"devDependencies": {
"ts-node": "~8.3.0",
"typescript": "^3.8.3"
},
"type": "module"
}

tsconfig.json
{
"compilerOptions": {
"lib": [
"ESNext",
"es2016",
"dom",
"es5"
],
"module": "esnext",
"moduleResolution": "Node",
"sourceMap": true,
"target": "es6",
"typeRoots": [
"node_modules/@types"
]
}
}

main.ts
// import ts = require("typescript");
import * as ts from "typescript";

export class Main {

node: ts.Node;
#test = 'zzz';

constructor() {}

process(): void {
ts.forEachChild(this.node, function cb() {
});
console.log('#test', this.#test);
}
}

const main = new Main();
main.process();

使用此代码,当我运行 npm run start , 我有错误 TypeError: ts.forEachChild is not a function
没有带有 ts.forEachClid() 的行它正确记录了私有(private)字段#test 的值。

如果我尝试替换 import * as ts from "typescript";通过 import ts = require("typescript"); , 我有错误 TS1202: Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from "mod"', 'import {a} from "mod"', 'import d from "mod"', or another module format instead
当然,我在 tsconfig.json 和 package.json 中尝试了很多更改(使用 `"type"= "module"),但无法解决这个问题。

我什至尝试替换 "module": "esnext"通过 "module": "commonjs" ,但我有一个错误 exports is not defined .

评论 :
这不是特定于模块“ typescript ”。我对“fs-extra”等其他模块也有同样的问题,它们以与大多数经典 NodeJS 模块不同的方式进行导出。

例如,模块“typescript”导出为 export = ts .

我也找到了这个引用,但它对我没有多大帮助:
https://www.typescriptlang.org/docs/handbook/modules.html

我的 nodeJs 版本是 13.3.0,我的 typescript 版本是 3.8.3
谢谢你的帮助

最佳答案

最后,好的回应是:你需要 commonjses2018能够在 Node 模块中使用 typescript #privateFields。

这是要使用的正确 tsconfig.json :

{
"compileOnSave": false,
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"target": "es2018",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
}
}

关于node.js - 如何使用 NodeJS 13 和 Typescript 3.8 导入 esm 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61507169/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com