如何使用 TypeScript 设置 Lerna monorepo

Posted

技术标签:

【中文标题】如何使用 TypeScript 设置 Lerna monorepo【英文标题】:How to set up Lerna monorepo with TypeScript 【发布时间】:2019-10-24 05:27:56 【问题描述】:

我有一个core 库,在package.json 中有以下内容:

"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
"es2015": "dist/es2015/index.js",
"types": "dist/es2015/index.d.ts",
"typings": "dist/es2015/index.d.ts",

该库将 TypeScript 代码构建到 dist/ 文件夹中以进行分发。源代码位于src/

我正在使用 Lerna 和 monorepos,我正在尝试获取另一个包/模块来按原样加载 TypeScript 代码:

import  someTypeScriptStuff  from '@test/core'

但是,这不起作用。 IntelliJ 和 TSLint 都抱怨缺少模块。如果我将package.json 中的main 字段的值更改为src/index.ts,那么它可以工作。

我不想在开发的时候一直把TS代码编译成dist,因为这很痛苦。

显然,我也不能将主字段更改为 src/index.ts,因为它应该引用在节点/浏览器中按原样工作的普通 javascript

我可以在package.json 中使用 IntelliJ 和 TSLint 都可以使用的 TypeScript 特定字段吗? 那将是理想的。

我能想到的唯一解决方案是让 main 字段指向 TS 代码,并通过将 main 字段交换回 dist/cjs/index.js 来更改我的构建过程以改变打包 NPM 模块的内容分配。我想避免这种情况。

【问题讨论】:

【参考方案1】:

我在根 tsconfig.json 中解决了这个问题:


  "compilerOptions": 
    "baseUrl": "./packages",
    "paths": 
      "@test/*": ["./*/src"]
    
  
  ...

然后我将它添加到每个包自己的tsconfig.json


  "extends": "../../tsconfig.json",
  "compilerOptions": 
    "rootDir": "src"
  

【讨论】:

以上是关于如何使用 TypeScript 设置 Lerna monorepo的主要内容,如果未能解决你的问题,请参考以下文章

带有 Yarn、TypeScript 和 React Native 的 Lerna:找不到模块“@project/common”或其对应的类型声明。ts(2307)

基于 Yarn WorkSpace + Lerna + OrangeCI 搭建 Typescript Monorepo 项目实践

如何设置 GitHub 操作以发布 Lerna Monorepo

从嵌套的 Lerna 包中删除依赖项

Typescript模块在同一个文件中以不同方式解析'rxjs'

在单存储库中使用 Lerna 对多个 Node 应用程序进行 Dockerizing