如何从 Lerna monorepo 中的包中加载包?
How do I load a package from a package in a Lerna monorepo?
我有:
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,但是一个处理 monorepos 的好工具是 npm link。
- cd packages/models
- npm link
- cd packages/server
- 恢复依赖中的版本
"@myapp/models": "x.y.z",
- npm link @myapp/models
应该够了。
希望对您有所帮助。
Lerna 会处理本地包之间的依赖关系,你只需要确保正确设置它们。我建议的第一件事是转到 @myapp/models
并确保您的 package.json
包含您需要的字段:main
更重要的是 types
(或 typings
如果你愿意的话):
// packages/models/package.json
{
// ...
"main": "dist/index.js",
"types": "dist/index.d.ts",
// ...
}
如您所见,我将它们都指向某个 dist
文件夹,这将我带到第二点 - 您需要构建每个包,就好像它是单一回购。我不是说你需要 dist
文件夹,你在哪里构建它取决于你,你只需要确保从外面你的 @myapp/models
暴露 main
和 types
并且这些是有效且现有的 .js
和 .d.ts
文件。
现在是最后一块拼图 - 您需要将 @myapp/models
依赖项声明为 "real" 包 - 您需要指定其版本而不是指向文件夹:
// packages/server/package.json
{
"dependencies": {
// ...
"@myapp/models": "0.0.1" // Put the actual version from packages/models/package.json here
// ...
}
}
Lerna 会注意到这是一个本地包,并会为您安装并link它。
lerna bootstrap 首先 yarn add 起作用
要么
lerna bootstrap 首先,然后添加包和目标版本然后 运行 yarn.
在服务器 package.json 中添加依赖项后,您只需要 运行
lerna run --stream build
并且您的本地应该可以访问它。
我有:
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,但是一个处理 monorepos 的好工具是 npm link。
- cd packages/models
- npm link
- cd packages/server
- 恢复依赖中的版本
"@myapp/models": "x.y.z",
- npm link @myapp/models
应该够了。
希望对您有所帮助。
Lerna 会处理本地包之间的依赖关系,你只需要确保正确设置它们。我建议的第一件事是转到 @myapp/models
并确保您的 package.json
包含您需要的字段:main
更重要的是 types
(或 typings
如果你愿意的话):
// packages/models/package.json
{
// ...
"main": "dist/index.js",
"types": "dist/index.d.ts",
// ...
}
如您所见,我将它们都指向某个 dist
文件夹,这将我带到第二点 - 您需要构建每个包,就好像它是单一回购。我不是说你需要 dist
文件夹,你在哪里构建它取决于你,你只需要确保从外面你的 @myapp/models
暴露 main
和 types
并且这些是有效且现有的 .js
和 .d.ts
文件。
现在是最后一块拼图 - 您需要将 @myapp/models
依赖项声明为 "real" 包 - 您需要指定其版本而不是指向文件夹:
// packages/server/package.json
{
"dependencies": {
// ...
"@myapp/models": "0.0.1" // Put the actual version from packages/models/package.json here
// ...
}
}
Lerna 会注意到这是一个本地包,并会为您安装并link它。
lerna bootstrap 首先 yarn add
在服务器 package.json 中添加依赖项后,您只需要 运行
lerna run --stream build
并且您的本地应该可以访问它。