如何从Lerna monorepo的包中加载包?

问题描述 投票:6回答:1

我有。

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'

我怎么才能让它正常工作?

node.js typescript npm lerna monorepo
1个回答
1
投票

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 文件。

现在是拼图的最后一块--你需要声明你的 @myapp/models 的依赖关系,就像它是一个 "真正的 "包一样--你需要指定它的版本,而不是指向一个文件夹。

// packages/server/package.json

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

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


1
投票

我不了解 Lerna,但处理 monorepos 的一个好工具是 npm链接.

  1. cd packagesmodels
  2. npm链接
  3. CD包装盒esserver
  4. 恢复版本 "@myapp/models": "x.y.z",
  5. npm链接 @myappmodels

应该够了。

希望能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.