node.js - 在使用 Typescript 并设置 allowJs=true 时,node_modules 中缺少 ./lib 文件
我对 NodeJS 是新手。我开始构建一个 Express 应用程序,其中一个 .js 文件使用了 requestRetry 模块。它运行得很好。后来我决定慢慢将 Typescript 引入我的项目。我将 Express 框架所需的基本部分转换为 Typescript,但我的一些文件(我提到的那个)仍然是 .js。
这是我的 tsconfig.js
{
"compilerOptions": {
"module": "commonjs",
"allowJs": true,
"esModuleInterop": true,
"target": "es6",
"noImplicitAny": true,
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/**/*",
"src/types/*"
]
}
},
"include": [
"./src/**/*"
]
}
项目编译正常,但当我运行应用程序时它会崩溃并显示
module.js:559
throw err;
^
Error: Cannot find module './lib/cookies'
at Function.Module._resolveFilename (module.js:557:15)
at Function.Module._load (module.js:484:25)
at Module.require (module.js:606:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (D:\@MyProjects\OneDriveAriaStats\dist\node_modules\request\index.js:16:15)
at Module._compile (module.js:662:30)
at Object.Module._extensions..js (module.js:673:10)
at Module.load (module.js:575:32)
at tryModuleLoad (module.js:515:12)
at Function.Module._load (module.js:507:3)
在我当前的设置下,tsc 会将所有编译后的文件输出到 dist 文件夹,并且还会在其下创建一个 node_modules,因为我的 tsconfig.js 中 allowjs=true。我进一步调查后发现,dist/node_module/request 下缺少 lib 文件夹,而在 node_module/request 中是存在的。
我在这里做错了什么?为什么 tsc 没有复制 request 模块所需的所有文件?
答案#1
我认为 dist 下 requestretry 缺少 lib 并不是问题。我已经查看了 requestretry 的 package.json。因为它声明的 main 字段是 index.js,如果你在 tsconfig.json 中使用 node 的解析策略,TypeScript 会将 requestretry 模块解析到 node_modules/requestretry/index.js,因此根本不会涉及 node_modules/requestretry/lib/。实际上,该包内部根本没有 lib 目录。