node.js - 如何从 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 将处理本地包之间的依赖关系,您只需要确保正确设置它们即可。我建议的第一件事是去@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 会注意到这是一个本地包,并将为您安装和链接它。
推荐阅读
- python - 如何为 VS Code 设置 lauch.json 以便我可以使用当前工作目录中的其他文件夹/文件?
- python - 神经网络输出的两个错误
- python - 使用 Gensim 提取主题
- python - 你能解释一下 callfun.counter 是局部变量还是全局变量????#如果local是什么范围呢?
- swift - 带有 CoreData 的 Siri 意图
- c# - 用 C# 编写程序,根据 Id (txtBxNumber),它将更新或在文本文件和富文本框中创建新记录
- matrix - 如何在 DolphinDB 中有效地基于向量生成矩阵?
- azure-cosmosdb - Cosmos db查询成本和性能取决于同一分区中的项目数?
- intellij-idea - 如何在 IntelliJ 提交差异对话框中选中/取消选中单个更改复选框?
- python - 如何用两个新维度替换 xarray 对象的当前维度