Обзор проблемы
Я пытаюсь создать расширение 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
Воспроизведение вопроса
Структура проекта
По сути, я хотел настроить свой проект, как описано в в этом вопросе , поэтому я пошел с рекомендацией "настроить главный выходной каталог для всего составного проекта".
Структура проекта выглядит следующим образом:
.
├── 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
, которые прервутся, если я когда-нибудь переместлю файлы вокруг
- Если это не так, как
baseUrl
должно работать, может кто-нибудь указать мне хороший пример? С того места, где я сижу, кажется, что baseUrl
всегда собирается создавать файлы .js с недопустимым импортом ... что кажется неправильным