我正在尝试创建具有多个typescript project references的vscode扩展,并在运行扩展时遇到以下错误:
Activating extension `Jarrett Spiker.jspiker-so-vscode-baseurl` failed: Cannot find module 'common/commonFile'
extensionHostProcess.js:457
Here is the error stack: Error: Cannot find module 'common/commonFile'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:602:15)
...
一切正常,并且VSCode在源代码中没有发现任何问题。
这是我创建的一个示例项目,用于复制此问题https://github.com/JarrettSpiker/jspiker-so-vscode-baseurl
npm install
npm run compile
实际上,我想按照this question中的描述设置项目,因此我建议“为整个复合项目设置主输出目录”。
项目结构如下:
.
├── client
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ │ └── extension.ts
│ └── tsconfig.json
├── common
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ │ └── commonFile.ts
│ └── tsconfig.json
├── out
│ ├── client
│ │ ├── extension.d.ts
│ │ ├── extension.js
│ │ └── extension.js.map
│ └── common
│ ├── commonFile.d.ts
│ ├── commonFile.js
│ └── commonFile.js.map
├── package-lock.json
├── package.json
└── tsconfig.json
我想避免混淆相对路径,因此我尝试使用baseUrl指向out
的根,并进行paths
查找以在适当的位置查找node_modules。为方便参考,以下是tsconfig.json
子项目的client
:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"lib": ["es6"],
"composite": true,
"sourceMap": true,
"rootDir": "src",
"tsBuildInfoFile" : "./client.tsbuildinfo",
"strict": true,
"noImplicitReturns": true,
"outDir": "../out/client/",
"baseUrl": "../out/",
"paths": {
"*" : [
"*",
"../client/node_modules/*"
]
}
},
"include": [
"src"
],
"exclude": [
"node_modules",
".vscode-test"
],
"references": [
{ "path": "../common" }
]
}
../../out/common/commonFile
类型的路径,如果我四处移动文件,这些路径会损坏< / li>
baseUrl
的工作方式,那么有人可以给我指出一个很好的例子吗?从我坐着的地方来看,baseUrl
似乎总是要用无效的导入来创建.js文件……这似乎是不对的