Я создал минимальный пример, чтобы показать мой вопрос: 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, поступающий из внешней зависимости .
Как сказать, что накопительный пакет должен включать файл из утилит в перенос через накопительный пакет?