代码之家  ›  专栏  ›  技术社区  ›  pzaenger lio

带有Lerna和TypeScript的Monorepo无法按路径别名导入包

  •  0
  • pzaenger lio  · 技术社区  · 5 年前

    我试图设置一个基于TypeScript的monorepo Lerna 酒吧 进口 按路径别名,执行此操作失败。

    1. tree
    .
    ├── lerna.json
    ├── package.json
    ├── package-lock.json
    ├── packages
    │   ├── bar
    │   │   ├── lib
    │   │   │   ├── index.d.ts
    │   │   │   └── index.js
    │   │   ├── package.json
    │   │   ├── src
    │   │   │   └── index.ts
    │   │   ├── tsconfig.build.json
    │   │   └── tsconfig.json
    │   └── foo
    │       ├── lib
    │       │   ├── index.d.ts
    │       │   └── index.js
    │       ├── package.json
    │       ├── src
    │       │   └── index.ts
    │       ├── tsconfig.build.json
    │       └── tsconfig.json
    ├── tsconfig.build.json
    └── tsconfig.json
    
    1. ./tsconfig.build.json
    {
      "compilerOptions": {
        "baseUrl": ".",
        "target": "es6",
        "module": "commonjs",
        "moduleResolution": "node",
        "declaration": true
      }
    }
    
    {
      "extends": "./tsconfig.build.json",
      "compilerOptions": {
        "baseUrl": ".",
        "paths": {
          "@company/bar": [
            "packages/bar"
          ],
          "@company/foo": [
            "packages/foo"
          ]
        }
      }
    }
    
    {
      "packages": [
        "packages/*"
      ],
      "version": "0.0.0"
    }
    
    1. ./包.json
    {
      "name": "root",
      "private": true,
      "scripts": {
        "tsc": "lerna run tsc"
      },
      "devDependencies": {
        "lerna": "^3.22.1",
        "ts-node": "^9.0.0",
        "ts-node-dev": "^1.0.0-pre.63",
        "typescript": "^4.0.3"
      }
    }
    

    :

    1. ./包装/bar/src/索引.ts
    export const bar = 'bar';
    
    {
      "name": "@company/bar",
      "version": "1.0.0",
    
      ...
    
      "main": "lib/index.js",
      "types": "lib/index.d.ts",
      "scripts": {
        "tsc": "tsc -p tsconfig.build.json"
      }
    }
    
    1. /包/条/tsconfig.build.json
    {
      "extends": "../../tsconfig.build.json",
      "compilerOptions": {
        "outDir": "./lib"
      },
      "include": [
        "src/**/*"
      ]
    }
    
    {
      "extends": "../../tsconfig.json"
    }
    

    包裹

    1. ./packages/foo/src/索引.ts
    import { bar } from '@company/bar';
    
    console.log(bar);
    
    1. ./packages/食品/包.json
    {
      "name": "@company/foo",
      "version": "1.0.0",
    
      ...
    
      "main": "lib/index.js",
      "types": "lib/index.d.ts",
      "scripts": {
        "tsc": "tsc -p tsconfig.build.json"
      }
    }
    
    “编译器选项”:{
    “outDir”:“../lib”
    },
    “src/**/*”
    ]
    }
    
    {
    “扩展”:“.//tsconfig.json文件"
    }
    

    最后:

    npm run tsc 编译我的包,在哪里 进口 . 它给出了以下错误:

    > lerna run tsc
    
    lerna notice cli v3.22.1
    lerna info Executing command in 2 packages: "npm run tsc"
    lerna info run Ran npm script 'tsc' in '@company/bar' in 2.4s:
    
    > @company/bar@1.0.0 tsc /.../monorepo-lerna/packages/bar
    > tsc -p tsconfig.build.json
    
    lerna ERR! npm run tsc exited 2 in '@company/foo'
    lerna ERR! npm run tsc stdout:
    
    > @company/foo@1.0.0 tsc /.../monorepo-lerna/packages/foo
    > tsc -p tsconfig.build.json
    
    src/index.ts(1,21): error TS2307: Cannot find module '@company/bar' or its corresponding type declarations.
    

    如果我改变 import { bar } from '@company/bar'; import { bar } from '../../bar/src'; 不过,我想先用进口的方式 bar

    0 回复  |  直到 5 年前
        1
  •  1
  •   Tadhg McDonald-Jensen    5 年前

    这是允许您将包导入为 @company/bar

        "paths": {
          "@company/bar": [
            "packages/bar"
          ],
          "@company/foo": [
            "packages/foo"
          ]
        }
    

    这是在中指定的 ./tsconfig.json foo 它正在使用 ./packages/foo/tsconfig.build.json 它从不包含根配置或指定路径本身,您可能需要从基目录中删除导入方案 tscofig 并将它们添加到内部包配置中:

    应包含以下内容:

    {
      "compilerOptions": {
        "paths": {
          "@company/bar": [
            "../bar"
          ]
        }
      }
    }
    

    同样的 packages/bar/tsconfig.build.json @company/foo 如果需要的话。

    推荐文章