gpt4 book ai didi

node.js - 如何从 Lerna monorepo 中的包中加载包?

转载 作者:行者123 更新时间:2023-12-02 11:16:19 26 4
gpt4 key购买 nike

我有:

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暴露 maintypes并且这些是有效且存在的 .js.d.ts文件。

现在是拼图的最后一 block - 您需要声明您的 @myapp/models依赖就好像它是一个“真正的”包 - 你需要指定它的版本而不是指向一个文件夹:

// packages/server/package.json

{
"dependencies": {
// ...
"@myapp/models": "0.0.1" // Put the actual version from packages/models/package.json here
// ...
}
}

Lerna 会注意到这是一个本地包,并将为您安装和链接它。

关于node.js - 如何从 Lerna monorepo 中的包中加载包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62366299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com