我有。
packages
-models
-package.json
-....
-server
-src
-index.ts
-package.json
在我的 packages/server/package.json
,我有。
"scripts": {
"dev": "ts-node src/index.ts"
},
"dependencies": {
"@myapp/models": "../models",
在我的... packages/server/src/index.ts
,我有。
import { sequelize } from '@myapp/models'
在我的... packages/models/src/index.ts
,我有。
export type UserAttributes = userAttr
export { sequelize } from './sequelize';
但它给我一个错误。
Try `npm install @types/myapp__models` if it exists or add a new declaration (.d.ts) file containing `declare module '@myapp/models';`
import { sequelize } from '@myapp/models'
我怎么才能让它正常工作?
Lerna 将会处理你的本地包之间的依赖关系,你只需要确保你正确地设置它们。我建议的第一件事是到 @myapp/models
并确保你的 package.json
包含你需要的字段。main
更重要的是 types
(或 typings
如果你愿意的话)。)
// packages/models/package.json
{
// ...
"main": "dist/index.js",
"types": "dist/index.d.ts",
// ...
}
正如你所看到的,我让他们两个人都指向了某个 dist
文件夹,这让我想到了我的第二点--你需要把每一个包都当作monorepo之外的一个单独的NPM模块来构建。我并不是说你需要用 dist
文件夹,在哪里建立由你决定,你只需要确保从外面看你的 @myapp/models
暴露 main
和 types
而且这些都是有效的和现有的 .js
和 .d.ts
文件。
现在是拼图的最后一块--你需要声明你的 @myapp/models
的依赖关系,就像它是一个 "真正的 "包一样--你需要指定它的版本,而不是指向一个文件夹。
// packages/server/package.json
{
"dependencies": {
// ...
"@myapp/models": "0.0.1" // Put the actual version from packages/models/package.json here
// ...
}
}
Lerna会注意到这是一个本地包,并会为你安装& 链接它。
我不了解 Lerna,但处理 monorepos 的一个好工具是 npm链接.
"@myapp/models": "x.y.z",
应该够了。
希望能帮到你。