Node.js 带有共享包的Typescript项目设置
在开始之前,我有几个前提:Node.js 带有共享包的Typescript项目设置,node.js,typescript,npm,lerna,Node.js,Typescript,Npm,Lerna,在开始之前,我有几个前提: 我想要一个共享包,它将包含在其他三个包中 打字稿 只有一个节点模块 多平台使用(Windows/Linux) 使用共享包中的依赖项 (现场重新加载将很好) 不要失去以后发布共享包的能力(其他三个包是web服务器,但现在正在进行大量开发) 来自全局包的通用脚本build:webbuild:apibuild:admin 我的文件夹结构是: / /node_modules/*** /packages/shared/package.json // Shared depend
build:web
build:api
build:admin
/
/node_modules/***
/packages/shared/package.json // Shared dependencies like typeorm, lodash etc..
/packages/shared/src/index.ts
/packages/shared/src/models/User.ts
/packages/web/package.json
/packages/web/tsconfig.json
/packages/web/src/index.ts // first express server (using shared code)
/packages/api/package.json
/packages/api/tsconfig.json
/packages/api/src/index.ts
...
/package.json
/tsconfig.common.json
互联网上有很多解决方案——Lerna、typescript项目参考、npm/Thread链接。。。但我无法找到一个合适的解决方案
例如,这很酷,但我无法设置为运行以下内容:
// package.json
{
"scripts": {
"debug:web": "concurrently \"(cd packages/shared && tsc -w)\" \"(cd packages/web && tsc -w)\" \"(cd packages/web && nodemon --inspect dist/index.js --watch .. /)\""
...
我想持续构建共享包(生成dist/index.js和.ts文件),并在../(packages文件夹)中发生更改后在nodemon中重新启动服务器
几个小时后,我放弃了重新加载代码的机会,并尝试通过我能找到的“最简单的方法”——在共享中没有包,而是通过以下方式直接包含代码:
// shared/index.ts
export const createConnection = () => ....
// web/index.ts
import { createConnection } from 'shared'
看起来它也不起作用:
// tsconfig.json
{
"extends": "../../tsconfig.settings.json",
"compilerOptions": {
"rootDir": "../",
"outDir": "dist",
"baseUrl": "./",
"paths": {
"shared": [ "../shared/src/" ]
}
}
}
现在的问题是:
File /shared/src/index.ts is not listed within the file list of the project in tsconfig.json. Projects must list all files or use an 'include' pattern.
下一步是(显然):
这管用!没有错误,但“dist”中也没有文件。。。哈哈
我很确定,有一些很好的解决方案,例如,或者它也不起作用,但我无法找到或构建它。如果我错了,请纠正我的错误,但您需要一个示例,其中项目被分离到monorepository中的包,用Typescript编写,并且一些包相互依赖。
如果是这样,我创建了这样的项目。我使用了Typescript的一个新特性:项目引用。您可以在配置文件中指定其他tsconfig,并为它们定义依赖项。例如:包B依赖于包A。Typescript将编译B并在开始编译A之前使用其声明
下面是tsconfig的一个小示例
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "lib"
},
"include": ["src"],
"exclude": ["lib"],
"references": [{ "path": "../util" }, { "path": "../crud-request" }]
}
您可以在此处获得更多信息:
我以这个项目为例构建了自己的项目,也许它也会对您有用:
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "lib"
},
"include": ["src"],
"exclude": ["lib"],
"references": [{ "path": "../util" }, { "path": "../crud-request" }]
}