Как скомпилировать модули машинописи с настройками baseUrl / paths в tsconfig - PullRequest
0 голосов
/ 25 апреля 2018

Я разрабатываю библиотеку компонентов, распространяемую через npm, и активно использую настройку baseUrl в tsconfig. Это действительно здорово, поэтому я могу легко написать

// <prjRoot>/src/some/deeply/nested/module
import { Component } from 'components';

вместо ужасного

// <prjRoot>/src/some/deeply/nested/module
import { Component } from '../../../src/components';

Также распространяю не скомпилированный пакет, а чисто отдельные модули es6. У меня есть основной index.ts файл с реэкспортом, как этот

export * from './src/components';
export * from './src/another-dir-components';

И вот настало время собрать пакет и опубликовать его в npm - TS не заменяет пути на относительные. Пользователи получают сообщение об ошибке «Не удается найти компоненты модуля», потому что их TypeScript (или они могут вообще не использовать TS) или Webpack ничего не знают о моей настройке baseUrl.

Есть решение через babel - babel-plugin-module-resolver

Работает, но только для кода. Если у меня есть такой код

import { Component } from 'components'; // actually <prjRoot>/src/components/index.ts
import { SomeInterface } from 'typings'; // <prjRoot>/src/typings/index.ts
...
export default Klass extends React.Component {}

Я получу

file.js . TS начал все о типах (например, import { SomeInterface }), затем Babel передает код и заменяет from 'components' на from '../../../components'. Great:

import { Component } from '../../../components';
...
/*#__PURE__*/
var Klass = (function (React.Component) {...transpiled babel code...})(React.Component);
export { Klass as default }

file.d.ts (все равно НЕ относительный путь, будет ошибка):

import { SomeInterface } from 'typings';
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...