我有:
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'
如何使它正常工作?
答案 0 :(得分:2)
Lerna将处理本地软件包之间的依赖关系,您只需要确保正确设置它们即可。我建议的第一件事是转到@myapp/models
,并确保您的package.json
包含您需要的字段:main
,更重要的是types
(或{{1 }}(如果您愿意):
typings
如您所见,我使它们都指向某个// packages/models/package.json
{
// ...
"main": "dist/index.js",
"types": "dist/index.d.ts",
// ...
}
文件夹,这将我带到第二点-您将需要构建每个软件包,就好像它是monorepo之外的一个单独的NPM模块一样。我并不是说您需要dist
文件夹,该文件夹由您自己决定,您只需要确保dist
从外部暴露@myapp/models
和{{1} },并且这些文件是有效的和现有的main
和types
文件。
现在,拼图的最后一部分-您需要声明.js
依赖项,就好像它是一个“真实”包一样-您需要指定其版本,而不是指向文件夹:
.d.ts
Lerna将注意到这是一个本地软件包,并将为您安装并链接它。
答案 1 :(得分:1)
我不认识Lerna,但是npm link是处理Monorepos的一个很好的工具。
"@myapp/models": "x.y.z",
应该足够了。
希望这会有所帮助。