我想把共享的公共代码放到一个私有的 npm 注册表中。
使用以下命令和 tsconfig 一直运行良好,直到我想通过发布到 npm 注册表来使一个项目依赖于另一个项目。
我有几个文件夹和很多文件,所以我使用路径和 tsconfig-paths(导入看起来很干净,例如import { Repo } from "adapters/api/repository";
)。
常见项目自行正确构建,但一旦发布并用作依赖项,当我构建使用它的项目时,它就会出现构建错误。
共同项目;构建良好:使用rm -rf dist && tsc --sourceMap -p ./ && cp tsconfig.json dist/ && cp .env dist/
.
包的文件结构是:
dist
src
adapters
api
repository.d.ts
repository.js
...
application
interfaces
interfaceA.d.ts
interfaceA.js
...
...
index.d.ts
index.js
tsconfig.json
哪里src/adapters/api/repository.ts
是:
import { InterfaceA } from "application/interfaces/interfaceA";
export interface ApiRepository {
property: InterfaceA;
...
}
tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"lib": [
"es2016"
],
"paths": {
"*": [
"src/*"
],
"adapters/*": [
"src/adapters/*"
],
"application/*": [
"src/application/*"
],
},
...
"declaration": true,
"strict": true
},
"include": [
"./src/**/*",
"./test/**/*"
],
"exclude": [
"node_modules",
"dist"
]
}
在另一个项目中,公共项目是依赖项,我使用相同的命令构建
rm -rf dist && tsc --sourceMap -p ./ && cp tsconfig.json dist/ && cp .env dist/
import { ProjectCommon } from "@project/common";
它是使用(vs code 显示正确的路径)导入的node_modules/@project/common/dist/src/index
。
我可以在node_modules/@project/common
.
但是当我构建时,我得到了这个错误:
node_modules/@project/common/dist/src/adapters/api/repository.d.ts:1:37 - error TS2307: Cannot find module 'application/interfaces/interfaceA' or its corresponding type declarations. 1 import { InterfaceA } from "application/interfaces/interfaceA";
两个项目中的文件结构相似,并且 tsconfig 路径相同,这有影响吗?我不应该在公共项目中使用路径,因为它必须作为库导入吗?
我试图将一些路径更改为相对路径,但它没有解决构建错误。公共项目中的路径绝对正确,这就是为什么我很惊讶地看到另一个项目在其自己的构建过程中显示错误,而公共项目是一个依赖项......
运行时ts-node -r tsconfig-paths/register --files ./src/index.ts
:
` /home/projects/node_modules/@project/common/dist/src/index.d.ts:1 从“适配器/api/another.file”导入{类};^^^^^^
SyntaxError:不能在模块外使用导入语句`
使用这些命令和 tsconfig 一直很好,直到我想通过发布到 npm 注册表来使一个依赖于另一个。
期待一些见解:)非常感谢