如何使用打字稿设置自定义 node_modules 路径
How to set custom node_modules path with typescript
我开始使用 TypeScript 开发 AWS Lambda 函数。我希望 node_modules
目录位于子目录中,以便能够管理层中的所有依赖项。所以我有以下结构:
- dependencies/ <- This will be my layer
- nodesjs/
- node_modules/
...
- my_own_dependencies/
...
- src
- blabla.ts
我为 my_own_dependencies
使用相对导入,效果很好。
但是我无法 tsc
导入节点模块,无论是什么模块,我总是 error TS2307: Cannot find module 'xxxx'
。使用相对导入也无济于事,因为如果一个模块本身依赖于另一个模块,仍然会抛出错误。
我在 tsconfig.json
中尝试了 compilerOptions
参数(baseUrl
、paths
和 rootDirs
)的各种组合,但 none它们确实有效。
现在我的 tsconfig.json 看起来像这样:
{
"compilerOptions": {
"target": "es2019",
"module": "commonjs"
"strict": true,
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"*": [
"dependencies/nodejs/node_modules"
]
},
"forceConsistentCasingInFileNames": true
}
}
编辑:运行 tsc --traceResolution blah/blah.ts
输出如下:
Module resolution kind is not specified, using 'NodeJs'.
Loading module 'xxx' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/path/to/blah/node_modules' does not exist, skipping all lookups in it.
File '/path/to/node_modules/xxx.ts' does not exist.
...
And so on until:
Directory '/node_modules' does not exist, skipping all lookups in it.
奇怪的是它说模块解析类型是未定义的,而它在 tsconfig.json
...
中明确定义为 "node"
感谢您的帮助!
好的,原来 tsconfig.json
在指定要编译的特定源文件时被忽略了,可能我在文档中遗漏了这一点...使用 Webpack 或只是运行 [=12 时一切最终都很好=].
我最终得到了以下 tsconfig.json
文件:
{
"compilerOptions": {
"target": "es2019",
"module": "commonjs",
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"moduleResolution": "node",
"baseUrl": "./dependencies/nodejs/node_modules",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
},
"include": [
"**/*.ts"
],
"exclude": [
"dependencies/nodejs/node_modules",
"**/*.spec.ts"
]
}
我开始使用 TypeScript 开发 AWS Lambda 函数。我希望 node_modules
目录位于子目录中,以便能够管理层中的所有依赖项。所以我有以下结构:
- dependencies/ <- This will be my layer
- nodesjs/
- node_modules/
...
- my_own_dependencies/
...
- src
- blabla.ts
我为 my_own_dependencies
使用相对导入,效果很好。
但是我无法 tsc
导入节点模块,无论是什么模块,我总是 error TS2307: Cannot find module 'xxxx'
。使用相对导入也无济于事,因为如果一个模块本身依赖于另一个模块,仍然会抛出错误。
我在 tsconfig.json
中尝试了 compilerOptions
参数(baseUrl
、paths
和 rootDirs
)的各种组合,但 none它们确实有效。
现在我的 tsconfig.json 看起来像这样:
{
"compilerOptions": {
"target": "es2019",
"module": "commonjs"
"strict": true,
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"*": [
"dependencies/nodejs/node_modules"
]
},
"forceConsistentCasingInFileNames": true
}
}
编辑:运行 tsc --traceResolution blah/blah.ts
输出如下:
Module resolution kind is not specified, using 'NodeJs'.
Loading module 'xxx' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/path/to/blah/node_modules' does not exist, skipping all lookups in it.
File '/path/to/node_modules/xxx.ts' does not exist.
...
And so on until:
Directory '/node_modules' does not exist, skipping all lookups in it.
奇怪的是它说模块解析类型是未定义的,而它在 tsconfig.json
...
感谢您的帮助!
好的,原来 tsconfig.json
在指定要编译的特定源文件时被忽略了,可能我在文档中遗漏了这一点...使用 Webpack 或只是运行 [=12 时一切最终都很好=].
我最终得到了以下 tsconfig.json
文件:
{
"compilerOptions": {
"target": "es2019",
"module": "commonjs",
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"moduleResolution": "node",
"baseUrl": "./dependencies/nodejs/node_modules",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
},
"include": [
"**/*.ts"
],
"exclude": [
"dependencies/nodejs/node_modules",
"**/*.spec.ts"
]
}