Как заставить накопительный пакет включить зависимость из другого пакета в lerna monorepo при его переносе (TypeScript)? - PullRequest
0 голосов
/ 17 марта 2020

Я создал минимальный пример, чтобы показать мой вопрос: Github repo .

У меня есть lerna monorepo с двумя npm пакетами в папке packages, пакеты называются:

utils : экспорт функции:

export const add = (a:number, b: number) => a + b

библиотека компонентов: : экспортирует один простой функциональный компонент React:

import React from 'react';
import { add } from '@project/utils';

export const MyComponent = () => <div>{add(2, 2)}</div>;

root в monorepo имеет tsconfig.json, который определяет paths ключ для сопоставления любых импортов формы @project/* с пакетами.

{
  "compilerOptions": {
    "jsx": "react",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "allowJs": true,
    "baseUrl": ".",
    "paths": {
      "@project/*": ["packages/*/src"]
    }
  },
  "exclude": ["**/build/**"]
}

Каждый пакет имеет rollup.config.js, оба по существу идентичны (хотя мы будем использовать только один в component-library пакет здесь):

import typescript from '@rollup/plugin-typescript';
import commonjs from '@rollup/plugin-commonjs';

export default {
    input: 'src/index.tsx',
    output: {
        dir: './build',
        format: 'cjs'
    },
    plugins: [
        commonjs(),
        typescript({ tsconfig: '../../tsconfig.json'}),
    ]
};

Следовательно, они оба используют пути, определенные в root tsconfig.json, и используют плагин для переноса Typescript.

component-library импортирует функцию из @project/utils с именем add(a,b).

Моя цель - создать сборку из этой библиотеки (используя rollup), без предварительной сборки пакета utils. Другими словами, я хочу собрать component-library с разрешением импорта из utils в исходный код utils, а не в папку сборки в пакете с символическими ссылками в node_modules (ie, без использования символических ссылок, созданных lerna ).

Я почти достигаю этого, за исключением того, что когда я запускаю скрипт сборки в component-library, я получаю ошибку:

src / index.tsx → ./build. .. [!] Ошибка: неожиданный токен (обратите внимание, что вам нужны плагины для импорта файлов, которые не JavaScript) .. \ utils \ src \ index.ts (1:21) 1: export const add = (a: number , b: number) => a + b ^

Насколько я понимаю, это означает, что разрешение импорта работает нормально, но накопительный пакет не переносит файл TS, поступающий из внешней зависимости .

Как сказать, что накопительный пакет должен включать файл из утилит в перенос через накопительный пакет?

...